module klang.klang.klang;
import 全局;
import std.conv: ·to = to;
import std.functional: ·fd = toDelegate;
import ··类型_ = klang.编译.类型.类型_;
import klang.编译.类型.类型_: 命令行选项_, 编译选项基类_, 解析的模块名称_, 输出结果_, 绑定函数_, 绑定子函数_, 清理函数_, 初始源文件检查函数_, 检查初始化函数_, 源文件准备函数_, 转换工厂_, 输出解析器_, 前端编译器接口_, 前端接口_, 编译主机接口_, 遍历节点函数类型_, 检查源文件函数_, 设置扫描_, 编译器基类_, TransformationResult, 程序主机接口_, 输出转换组_, 标识符字符判断函数_, 打印机_, 打印选项_, 打印助手_, 转换支持_;
import klang.klang.输出准备.Klang输出准备_: 重新分组源文件;
import klang.编译.诊断集.诊断集_: 诊断集_;
import klang.编译.诊断.诊断_: 诊断消息_, 诊断_;
import 注册 = klang.编译.注册.注册_;
import 基础节点 = klang.编译.语法节点.节点_;
import 系统 = klang.编译.系统.系统_;
import 路径 = klang.编译.路径.路径_;
import klang.编译.核心.核心_: 整数_, 创建词典, 创建数组, 数组转词典, 简单链表_, 词典_, 最大, 最小, 连接, 过滤, 返回零值, 在规范组内查找;
import klang.编译.类型.枚举值.枚举值_: TK, 字符_, 节点标志_;
import klang.klang.编译.klang编译_: 前端编译器_;
import klang.klang.类型.klang类型_: KSK, 编译选项_, 扩展名_, 配置文件名_, 作者_, klang解析的模块名称_;
import klang.klang.常量值.Klang常量值_: 转换系统设置, 转换架构设置, 转换环境设置, 转换支持设置, 转换输出类型设置, 转换平台设置, 转换输出模式设置, 组合令牌文本, 配置种类_;
import 节点 = klang.klang.语法节点.Klang节点_;
import klang.klang.语法节点.Klang节点_: 遍历节点;
import klang.编译.路径.路径_: 路径_, 获取基础文件名称, 文件扩展名是;
import klang.编译.命令行.命令行_: 命令行编译, 查找配置文件, 编译的命令行_, 编译配置文件;
import klang.编译.json.JSON: JSON类型_, JSON值_;
import klang.编译.工具.工具_: getLocaleSpecificMessage, 诊断收集_;
import klang.编译.主机.程序主机_: 创建主机;
import klang.klang.检查.klang检查_: 创建klang检查, 源文件初始检查, 检查初始化, Klang转换支持_;
import klang.klang.处理导入模块.处理导入_: 创建收集函数, 加载klang模块, 获取默认支持库名称;
import klang.klang.绑定.klang绑定_: 创建绑定工作站, 创建绑定子工作站, 创建绑定清理;
import klang.klang.打印输出.Klang打印输出_: klang创建打印机, klang创建输出打印机;
import klang.编译.语法节点.节点_: 源文件_;
import klang.编译.triple.Triple: Triple, 编译目标平台内容, ArchType, OSType, isArch64Bit, EnvironmentType, isWindowsMSVCEnvironment, isWindowsGNUEnvironment, isMusl, getEnvironment;
import klang.klang.转换工厂.实例化代码.中间码_: 实例化代码转换;
import klang.klang.转换工厂.声明转换.Klang声明转换_: 声明转换;
import klang.klang.转换工厂.转换为IR.Klang转换为IR_: 转换IR;
import klang.klang.转换工厂.转为输出文件.转为输出文件_: 转为输出;
import klang.klang.转换工厂.中间码转换.中间码_: 中间码转换;
dstring 语言id = "klang"d;
TK 语言前端目标;
bool 初始化函数缓存;
bool 启动函数缓存;
bool 已经初始化 = false;
dstring 默认支持库文件名 = "lib.d.k2"d;
//#范围 选项声明组
命令行选项_[] 选项声明组;
命令行选项_[] 模块选项;
命令行选项_[] 构建选项;
//#结束范围
/**
 * Generated by scripts/regenerate-unicode-identifier-parts.js on node v12.4.0 with unicode 12.1
 * based on http://www.unicode.org/reports/tr31/ and https://www.ecma-international.org/ecma-262/6.0/#sec-names-and-keywords
 * 统一码标识符头字符范围表 corresponds to the ID_Start and Other_ID_Start property, and
 * 统一码标识符中间符范围表 corresponds to ID_Continue, Other_ID_Continue, plus ID_Start and Other_ID_Start
 */
const long[] 统一码标识符头字符范围表;
const long[] 统一码标识符中间符范围表;
//#范围 命令行处理
命令行选项_ _保存时编译选项;
命令行选项_ _klang根选项;
命令行选项_ _klangMod根信息;
static this() {
    初始化函数缓存 = 注册.注册初始化函数(.语言id, cast(注册.初始化函数_)(·fd(&.初始化函数)));
    启动函数缓存 = 注册.注册启动函数(.语言id, cast(注册.启动函数_)(·fd(&.启动函数)));
    命令行选项_ ···tempS·0·_1;
    {
        ···tempS·0·_1.name = "编译"d;
        ···tempS·0·_1.shortName = "b"d;
        ···tempS·0·_1.type = "boolean"d;
        ···tempS·0·_1.showInSimplifiedHelpView = true;
        ···tempS·0·_1.isCommandLineOnly = true;
        ···tempS·0·_1.category = 诊断集_.命令行选项;
        ···tempS·0·_1.description = 诊断集_.构建项目并生成诊断;
    }
    命令行选项_ ···tempS·0·_2;
    {
        ···tempS·0·_2.name = "帮助"d;
        ···tempS·0·_2.shortName = "h"d;
        ···tempS·0·_2.type = "boolean"d;
        ···tempS·0·_2.showInSimplifiedHelpView = true;
        ···tempS·0·_2.isCommandLineOnly = true;
        ···tempS·0·_2.category = 诊断集_.命令行选项;
        ···tempS·0·_2.description = 诊断集_.打印帮助消息;
    }
    命令行选项_ ···tempS·0·_3;
    {
        ···tempS·0·_3.name = "版本号"d;
        ···tempS·0·_3.shortName = "v"d;
        ···tempS·0·_3.type = "boolean"d;
        ···tempS·0·_3.showInSimplifiedHelpView = true;
        ···tempS·0·_3.isCommandLineOnly = true;
        ···tempS·0·_3.category = 诊断集_.命令行选项;
        ···tempS·0·_3.description = 诊断集_.输出编译器版本号;
    }
    命令行选项_ ···tempS·0·_4;
    {
        ···tempS·0·_4.name = "初始"d;
        ···tempS·0·_4.shortName = "init"d;
        ···tempS·0·_4.type = "boolean"d;
        ···tempS·0·_4.showInSimplifiedHelpView = true;
        ···tempS·0·_4.isCommandLineOnly = true;
        ···tempS·0·_4.category = 诊断集_.命令行选项;
        ···tempS·0·_4.description = 诊断集_.初始一个_Klang_项目_并创建了一个_kconfig_json_文件;
    }
    命令行选项_ ···tempS·0·_5;
    {
        ···tempS·0·_5.name = "监控"d;
        ···tempS·0·_5.shortName = "w"d;
        ···tempS·0·_5.type = "boolean"d;
        ···tempS·0·_5.paramType = 诊断集_.选项;
        ···tempS·0·_5.showInSimplifiedHelpView = true;
        ···tempS·0·_5.category = 诊断集_.基本编译选项;
        ···tempS·0·_5.description = 诊断集_.监控输入文件;
    }
    命令行选项_ ···tempS·0·_6;
    {
        ···tempS·0·_6.name = "启用诊断"d;
        ···tempS·0·_6.type = "boolean"d;
        ···tempS·0·_6.paramType = 诊断集_.选项;
        ···tempS·0·_6.showInSimplifiedHelpView = true;
        ···tempS·0·_6.category = 诊断集_.基本编译选项;
        ···tempS·0·_6.description = 诊断集_.启用诊断;
    }
    命令行选项_ ···tempS·0·_7;
    {
        ···tempS·0·_7.name = "系统"d;
        ···tempS·0·_7.shortName = "os"d;
        ···tempS·0·_7.type = "Map"d;
        ···tempS·0·_7.types = [
            "ananas"d : "ananas"d,
            "cloudabi"d : "cloudabi"d,
            "darwin"d : "darwin"d,
            "dragonfly"d : "dragonfly"d,
            "freebsd"d : "freebsd"d,
            "fuchsia"d : "fuchsia"d,
            "ios"d : "ios"d,
            "kfreebsd"d : "kfreebsd"d,
            "linux"d : "linux"d,
            "lv2"d : "lv2"d,
            "macos"d : "macos"d,
            "netbsd"d : "netbsd"d,
            "openbsd"d : "openbsd"d,
            "solaris"d : "solaris"d,
            "win32"d : "win32"d,
            "windows"d : "windows"d,
            "zos"d : "zos"d,
            "haiku"d : "haiku"d,
            "minix"d : "minix"d,
            "rtems"d : "rtems"d,
            "nacl"d : "nacl"d,
            "aix"d : "aix"d,
            "cuda"d : "cuda"d,
            "nvcl"d : "nvcl"d,
            "amdhsa"d : "amdhsa"d,
            "ps4"d : "ps4"d,
            "elfiamcu"d : "elfiamcu"d,
            "tvos"d : "tvos"d,
            "watchos"d : "watchos"d,
            "mesa3d"d : "mesa3d"d,
            "contiki"d : "contiki"d,
            "amdpal"d : "amdpal"d,
            "hermit"d : "hermit"d,
            "hurd"d : "hurd"d,
            "wasi"d : "wasi"d,
            "emscripten"d : "emscripten"d
        ];
        ···tempS·0·_7.paramType = 诊断集_.选项;
        ···tempS·0·_7.category = 诊断集_.基本编译选项;
        ···tempS·0·_7.description = 诊断集_.设置源码编译目标系统;
    }
    命令行选项_ ···tempS·0·_8;
    {
        ···tempS·0·_8.name = "系统版本"d;
        ···tempS·0·_8.shortName = "osv"d;
        ···tempS·0·_8.type = "string"d;
        ···tempS·0·_8.paramType = 诊断集_.选项;
        ···tempS·0·_8.isFilePath = false;
        ···tempS·0·_8.showInSimplifiedHelpView = true;
        ···tempS·0·_8.category = 诊断集_.基本编译选项;
        ···tempS·0·_8.description = 诊断集_.系统版本号例如_1_21_01;
    }
    命令行选项_ ···tempS·0·_9;
    {
        ···tempS·0·_9.name = "架构"d;
        ···tempS·0·_9.shortName = "a"d;
        ···tempS·0·_9.type = "Map"d;
        ···tempS·0·_9.types = [
            "i386"d : "i386"d,
            "i486"d : "i486"d,
            "i586"d : "i586"d,
            "i686"d : "i686"d,
            "i786"d : "i786"d,
            "i886"d : "i886"d,
            "i986"d : "i986"d,
            "amd64"d : "amd64"d,
            "x86_64"d : "x86_64"d,
            "x86_64h"d : "x86_64h"d,
            "powerpc"d : "powerpc"d,
            "powerpcspe"d : "powerpcspe"d,
            "ppc"d : "ppc"d,
            "ppc32"d : "ppc32"d,
            "powerpcle"d : "powerpcle"d,
            "ppcle"d : "ppcle"d,
            "ppc32le"d : "ppc32le"d,
            "powerpc64"d : "powerpc64"d,
            "ppu"d : "ppu"d,
            "ppc64"d : "ppc64"d,
            "powerpc64le"d : "powerpc64le"d,
            "ppc64le"d : "ppc64le"d,
            "xscale"d : "xscale"d,
            "xscaleeb"d : "xscaleeb"d,
            "aarch64"d : "aarch64"d,
            "aarch64_be"d : "aarch64_be"d,
            "aarch64_32"d : "aarch64_32"d,
            "arc"d : "arc"d,
            "arm64"d : "arm64"d,
            "arm64_32"d : "arm64_32"d,
            "arm64e"d : "arm64e"d,
            "arm"d : "arm"d,
            "armeb"d : "armeb"d,
            "thumb"d : "thumb"d,
            "thumbeb"d : "thumbeb"d,
            "avr"d : "avr"d,
            "m68k"d : "m68k"d,
            "msp430"d : "msp430"d,
            "mips"d : "mips"d,
            "mipseb"d : "mipseb"d,
            "mipsallegrex"d : "mipsallegrex"d,
            "mipsisa32r6"d : "mipsisa32r6"d,
            "mipsr6"d : "mipsr6"d,
            "mipsel"d : "mipsel"d,
            "mipsallegrexel"d : "mipsallegrexel"d,
            "mipsisa32r6el"d : "mipsisa32r6el"d,
            "mipsr6el"d : "mipsr6el"d,
            "mips64"d : "mips64"d,
            "mips64eb"d : "mips64eb"d,
            "mipsn32"d : "mipsn32"d,
            "mipsisa64r6"d : "mipsisa64r6"d,
            "mips64r6"d : "mips64r6"d,
            "mipsn32r6"d : "mipsn32r6"d,
            "mips64el"d : "mips64el"d,
            "mipsn32el"d : "mipsn32el"d,
            "mipsisa64r6el"d : "mipsisa64r6el"d,
            "mips64r6el"d : "mips64r6el"d,
            "mipsn32r6el"d : "mipsn32r6el"d,
            "r600"d : "r600"d,
            "amdgcn"d : "amdgcn"d,
            "riscv32"d : "riscv32"d,
            "riscv64"d : "riscv64"d,
            "hexagon"d : "hexagon"d,
            "s390x"d : "s390x"d,
            "systemz"d : "systemz"d,
            "sparc"d : "sparc"d,
            "sparcel"d : "sparcel"d,
            "sparcv9"d : "sparcv9"d,
            "sparc64"d : "sparc64"d,
            "tce"d : "tce"d,
            "tcele"d : "tcele"d,
            "xcore"d : "xcore"d,
            "nvptx"d : "nvptx"d,
            "nvptx64"d : "nvptx64"d,
            "le32"d : "le32"d,
            "le64"d : "le64"d,
            "amdil"d : "amdil"d,
            "amdil64"d : "amdil64"d,
            "hsail"d : "hsail"d,
            "hsail64"d : "hsail64"d,
            "spir"d : "spir"d,
            "spir64"d : "spir64"d,
            "lanai"d : "lanai"d,
            "renderscript32"d : "renderscript32"d,
            "renderscript64"d : "renderscript64"d,
            "shave"d : "shave"d,
            "ve"d : "ve"d,
            "wasm32"d : "wasm32"d,
            "wasm64"d : "wasm64"d,
            "csky"d : "csky"d,
            "aarch32"d : "aarch32"d,
            "aarch32_eb"d : "aarch32_eb"d,
            "aarch64_eb"d : "aarch64_eb"d,
            "arm64eb"d : "arm64eb"d,
            "bpf"d : "bpf"d,
            "bpf_be"d : "bpf_be"d,
            "bpfeb"d : "bpfeb"d,
            "bpf_le"d : "bpf_le"d,
            "bpfel"d : "bpfel"d,
            "kalimba"d : "kalimba"d,
            "kalimba3"d : "kalimba3"d,
            "kalimba4"d : "kalimba4"d,
            "kalimba5"d : "kalimba5"d,
            "invalid"d : "invalid"d,
            "armv2"d : "armv2"d,
            "armv2a"d : "armv2a"d,
            "armv3"d : "armv3"d,
            "armv3m"d : "armv3m"d,
            "armv4"d : "armv4"d,
            "armv4t"d : "armv4t"d,
            "armv5t"d : "armv5t"d,
            "armv5te"d : "armv5te"d,
            "armv5tej"d : "armv5tej"d,
            "armv6"d : "armv6"d,
            "armv6k"d : "armv6k"d,
            "armv6t2"d : "armv6t2"d,
            "armv6kz"d : "armv6kz"d,
            "armv6-m"d : "armv6-m"d,
            "armv7-a"d : "armv7-a"d,
            "armv7ve"d : "armv7ve"d,
            "armv7-r"d : "armv7-r"d,
            "armv7-m"d : "armv7-m"d,
            "armv7e-m"d : "armv7e-m"d,
            "armv8-a"d : "armv8-a"d,
            "armv8.1-a"d : "armv8.1-a"d,
            "armv8.2-a"d : "armv8.2-a"d,
            "armv8.3-a"d : "armv8.3-a"d,
            "armv8.4-a"d : "armv8.4-a"d,
            "armv8.5-a"d : "armv8.5-a"d,
            "armv8.6-a"d : "armv8.6-a"d,
            "armv8.7-a"d : "armv8.7-a"d,
            "armv8-r"d : "armv8-r"d,
            "armv8-m.base"d : "armv8-m.base"d,
            "armv8-m.main"d : "armv8-m.main"d,
            "armv8.1-m.main"d : "armv8.1-m.main"d,
            "iwmmxt"d : "iwmmxt"d,
            "iwmmxt2"d : "iwmmxt2"d,
            "armv7s"d : "armv7s"d,
            "armv7k"d : "armv7k"d
        ];
        ···tempS·0·_9.paramType = 诊断集_.选项;
        ···tempS·0·_9.category = 诊断集_.基本编译选项;
        ···tempS·0·_9.description = 诊断集_.设置源码编译目标架构;
    }
    命令行选项_ ···tempS·0·_10;
    {
        ···tempS·0·_10.name = "输出类型"d;
        ···tempS·0·_10.type = "Map"d;
        ···tempS·0·_10.types = [
            "exe"d : "exe"d,
            "elf"d : "elf"d,
            "lib"d : "lib"d,
            "staticLib"d : "staticLib"d,
            "dynamicLib"d : "dynamicLib"d
        ];
        ···tempS·0·_10.paramType = 诊断集_.选项;
        ···tempS·0·_10.showInSimplifiedHelpView = true;
        ···tempS·0·_10.category = 诊断集_.基本编译选项;
        ···tempS·0·_10.description = 诊断集_.设置输出类型;
    }
    命令行选项_ ···tempS·0·_11;
    {
        ···tempS·0·_11.name = "平台"d;
        ···tempS·0·_11.type = "Map"d;
        ···tempS·0·_11.types = [
            "xcoff"d : "xcoff"d,
            "coff"d : "coff"d,
            "elf"d : "elf"d,
            "goff"d : "goff"d,
            "macho"d : "macho"d,
            "wasm"d : "wasm"d
        ];
        ···tempS·0·_11.paramType = 诊断集_.选项;
        ···tempS·0·_11.showInSimplifiedHelpView = true;
        ···tempS·0·_11.category = 诊断集_.基本编译选项;
        ···tempS·0·_11.description = 诊断集_.设置输出类型;
    }
    命令行选项_ ···tempS·0·_12;
    {
        ···tempS·0·_12.name = "环境"d;
        ···tempS·0·_12.type = "Map"d;
        ···tempS·0·_12.types = [
            "eabihf"d : "eabihf"d,
            "eabi"d : "eabi"d,
            "gnuabin32"d : "gnuabin32"d,
            "gnuabi64"d : "gnuabi64"d,
            "gnueabihf"d : "gnueabihf"d,
            "gnueabi"d : "gnueabi"d,
            "gnux32"d : "gnux32"d,
            "gnu_ilp32"d : "gnu_ilp32"d,
            "code16"d : "code16"d,
            "gnu"d : "gnu"d,
            "android"d : "android"d,
            "musleabihf"d : "musleabihf"d,
            "musleabi"d : "musleabi"d,
            "muslx32"d : "muslx32"d,
            "musl"d : "musl"d,
            "msvc"d : "msvc"d,
            "itanium"d : "itanium"d,
            "cygnus"d : "cygnus"d,
            "coreclr"d : "coreclr"d,
            "simulator"d : "simulator"d,
            "macabi"d : "macabi"d
        ];
        ···tempS·0·_12.paramType = 诊断集_.选项;
        ···tempS·0·_12.category = 诊断集_.基本编译选项;
        ···tempS·0·_12.description = 诊断集_.设置运行环境;
    }
    命令行选项_ ···tempS·0·_13;
    {
        ···tempS·0·_13.name = "环境版本"d;
        ···tempS·0·_13.type = "string"d;
        ···tempS·0·_13.paramType = 诊断集_.选项;
        ···tempS·0·_13.isFilePath = false;
        ···tempS·0·_13.showInSimplifiedHelpView = true;
        ···tempS·0·_13.category = 诊断集_.基本编译选项;
        ···tempS·0·_13.description = 诊断集_.环境版本号例如_1_21_01;
    }
    命令行选项_ ···tempS·0·_14;
    {
        ···tempS·0·_14.name = "支持"d;
        ···tempS·0·_14.type = "Map"d;
        ···tempS·0·_14.types = [
            "apple"d : "apple"d,
            "pc"d : "pc"d,
            "scei"d : "scei"d,
            "sie"d : "sie"d,
            "fsl"d : "fsl"d,
            "ibm"d : "ibm"d,
            "img"d : "img"d,
            "mti"d : "mti"d,
            "nvidia"d : "nvidia"d,
            "csr"d : "csr"d,
            "myriad"d : "myriad"d,
            "amd"d : "amd"d,
            "mesa"d : "mesa"d,
            "suse"d : "suse"d,
            "oe"d : "oe"d
        ];
        ···tempS·0·_14.paramType = 诊断集_.选项;
        ···tempS·0·_14.category = 诊断集_.基本编译选项;
        ···tempS·0·_14.description = 诊断集_.设置供应商;
    }
    命令行选项_ ···tempS·0·_15;
    {
        ···tempS·0·_15.name = "输出模式"d;
        ···tempS·0·_15.type = "Map"d;
        ···tempS·0·_15.types = [
            "调试"d : "调试"d,
            "发布"d : "发布"d,
            "测试"d : "测试"d
        ];
        ···tempS·0·_15.paramType = 诊断集_.选项;
        ···tempS·0·_15.showInSimplifiedHelpView = true;
        ···tempS·0·_15.category = 诊断集_.基本编译选项;
        ···tempS·0·_15.description = 诊断集_.设置输出模式;
    }
    命令行选项_ ···tempS·0·_16;
    命令行选项_* ···tempS·0·_17 = new 命令行选项_;
    {
        ···tempS·0·_17.name = "定义"d;
        ···tempS·0·_17.type = "string"d;
    }
    {
        ···tempS·0·_16.name = "定义"d;
        ···tempS·0·_16.shortName = "env"d;
        ···tempS·0·_16.type = "list"d;
        ···tempS·0·_16.element = ···tempS·0·_17;
        ···tempS·0·_16.paramType = 诊断集_.选项;
        ···tempS·0·_16.showInSimplifiedHelpView = true;
        ···tempS·0·_16.category = 诊断集_.基本编译选项;
        ···tempS·0·_16.description = 诊断集_.设置环境变量数组;
    }
    命令行选项_ ···tempS·0·_18;
    {
        ···tempS·0·_18.name = "输出"d;
        ···tempS·0·_18.shortName = "o"d;
        ···tempS·0·_18.type = "string"d;
        ···tempS·0·_18.paramType = 诊断集_.选项;
        ···tempS·0·_18.isFilePath = true;
        ···tempS·0·_18.showInSimplifiedHelpView = true;
        ···tempS·0·_18.category = 诊断集_.基本编译选项;
        ···tempS·0·_18.description = 诊断集_.输出到这个目录;
    }
    命令行选项_ ···tempS·0·_19;
    {
        ···tempS·0·_19.name = "源码"d;
        ···tempS·0·_19.type = "string"d;
        ···tempS·0·_19.paramType = 诊断集_.选项;
        ···tempS·0·_19.isFilePath = true;
        ···tempS·0·_19.showInSimplifiedHelpView = true;
        ···tempS·0·_19.category = 诊断集_.基本编译选项;
        ···tempS·0·_19.description = 诊断集_.设置源码根目录_默认为_Slash源码;
    }
    命令行选项_ ···tempS·0·_20;
    {
        ···tempS·0·_20.name = "全局模块路径"d;
        ···tempS·0·_20.type = "string"d;
        ···tempS·0·_20.paramType = 诊断集_.选项;
        ···tempS·0·_20.isFilePath = true;
        ···tempS·0·_20.category = 诊断集_.基本编译选项;
        ···tempS·0·_20.description = 诊断集_.设置源码根目录_默认为_Slash源码;
    }
    命令行选项_ ···tempS·0·_21;
    {
        ···tempS·0·_21.name = "配置文件"d;
        ···tempS·0·_21.type = "string"d;
        ···tempS·0·_21.paramType = 诊断集_.选项;
        ···tempS·0·_21.isFilePath = true;
        ···tempS·0·_21.category = 诊断集_.基本编译选项;
        ···tempS·0·_21.description = 诊断集_.设置源码根目录_默认为_Slash源码;
    }
    命令行选项_ ···tempS·0·_22;
    {
        ···tempS·0·_22.name = "构建信息文件"d;
        ···tempS·0·_22.type = "string"d;
        ···tempS·0·_22.paramType = 诊断集_.选项;
        ···tempS·0·_22.isFilePath = true;
        ···tempS·0·_22.category = 诊断集_.基本编译选项;
        ···tempS·0·_22.description = 诊断集_.设置源码根目录_默认为_Slash源码;
    }
    选项声明组 = [
        ···tempS·0·_1,
        ···tempS·0·_2,
        ···tempS·0·_3,
        ···tempS·0·_4,
        ···tempS·0·_5,
        ···tempS·0·_6,
        ···tempS·0·_7,
        ···tempS·0·_8,
        ···tempS·0·_9,
        ···tempS·0·_10,
        ···tempS·0·_11,
        ···tempS·0·_12,
        ···tempS·0·_13,
        ···tempS·0·_14,
        ···tempS·0·_15,
        ···tempS·0·_16,
        ···tempS·0·_18,
        ···tempS·0·_19,
        ···tempS·0·_20,
        ···tempS·0·_21,
        ···tempS·0·_22
    ];
    命令行选项_ ···tempS·0·_23;
    {
        ···tempS·0·_23.name = "名称"d;
        ···tempS·0·_23.type = "string"d;
        ···tempS·0·_23.paramType = 诊断集_.选项;
        ···tempS·0·_23.category = 诊断集_.项目配置;
        ···tempS·0·_23.description = 诊断集_.项目名称_例如_klangapp;
    }
    命令行选项_ ···tempS·0·_24;
    {
        ···tempS·0·_24.name = "描述"d;
        ···tempS·0·_24.type = "string"d;
        ···tempS·0·_24.paramType = 诊断集_.选项;
        ···tempS·0·_24.category = 诊断集_.项目配置;
        ···tempS·0·_24.description = 诊断集_.项目简介;
    }
    命令行选项_ ···tempS·0·_25;
    {
        ···tempS·0·_25.name = "版本"d;
        ···tempS·0·_25.type = "string"d;
        ···tempS·0·_25.paramType = 诊断集_.选项;
        ···tempS·0·_25.category = 诊断集_.项目配置;
        ···tempS·0·_25.description = 诊断集_.目前版本号;
    }
    命令行选项_ ···tempS·0·_26;
    {
        ···tempS·0·_26.name = "支持"d;
        ···tempS·0·_26.type = "Map"d;
        ···tempS·0·_26.types = [
            "apple"d : "apple"d,
            "pc"d : "pc"d,
            "scei"d : "scei"d,
            "sie"d : "sie"d,
            "fsl"d : "fsl"d,
            "ibm"d : "ibm"d,
            "img"d : "img"d,
            "mti"d : "mti"d,
            "nvidia"d : "nvidia"d,
            "csr"d : "csr"d,
            "myriad"d : "myriad"d,
            "amd"d : "amd"d,
            "mesa"d : "mesa"d,
            "suse"d : "suse"d,
            "oe"d : "oe"d
        ];
        ···tempS·0·_26.paramType = 诊断集_.选项;
        ···tempS·0·_26.category = 诊断集_.项目配置;
        ···tempS·0·_26.description = 诊断集_.设置供应商;
    }
    命令行选项_ ···tempS·0·_27;
    {
        ···tempS·0·_27.name = "系统"d;
        ···tempS·0·_27.shortName = "os"d;
        ···tempS·0·_27.type = "Map"d;
        ···tempS·0·_27.types = [
            "ananas"d : "ananas"d,
            "cloudabi"d : "cloudabi"d,
            "darwin"d : "darwin"d,
            "dragonfly"d : "dragonfly"d,
            "freebsd"d : "freebsd"d,
            "fuchsia"d : "fuchsia"d,
            "ios"d : "ios"d,
            "kfreebsd"d : "kfreebsd"d,
            "linux"d : "linux"d,
            "lv2"d : "lv2"d,
            "macos"d : "macos"d,
            "netbsd"d : "netbsd"d,
            "openbsd"d : "openbsd"d,
            "solaris"d : "solaris"d,
            "win32"d : "win32"d,
            "windows"d : "windows"d,
            "zos"d : "zos"d,
            "haiku"d : "haiku"d,
            "minix"d : "minix"d,
            "rtems"d : "rtems"d,
            "nacl"d : "nacl"d,
            "aix"d : "aix"d,
            "cuda"d : "cuda"d,
            "nvcl"d : "nvcl"d,
            "amdhsa"d : "amdhsa"d,
            "ps4"d : "ps4"d,
            "elfiamcu"d : "elfiamcu"d,
            "tvos"d : "tvos"d,
            "watchos"d : "watchos"d,
            "mesa3d"d : "mesa3d"d,
            "contiki"d : "contiki"d,
            "amdpal"d : "amdpal"d,
            "hermit"d : "hermit"d,
            "hurd"d : "hurd"d,
            "wasi"d : "wasi"d,
            "emscripten"d : "emscripten"d
        ];
        ···tempS·0·_27.paramType = 诊断集_.选项;
        ···tempS·0·_27.category = 诊断集_.项目配置;
        ···tempS·0·_27.description = 诊断集_.设置源码编译目标系统;
    }
    命令行选项_ ···tempS·0·_28;
    {
        ···tempS·0·_28.name = "架构"d;
        ···tempS·0·_28.shortName = "a"d;
        ···tempS·0·_28.type = "Map"d;
        ···tempS·0·_28.types = [
            "i386"d : "i386"d,
            "i486"d : "i486"d,
            "i586"d : "i586"d,
            "i686"d : "i686"d,
            "i786"d : "i786"d,
            "i886"d : "i886"d,
            "i986"d : "i986"d,
            "amd64"d : "amd64"d,
            "x86_64"d : "x86_64"d,
            "x86_64h"d : "x86_64h"d,
            "powerpc"d : "powerpc"d,
            "powerpcspe"d : "powerpcspe"d,
            "ppc"d : "ppc"d,
            "ppc32"d : "ppc32"d,
            "powerpcle"d : "powerpcle"d,
            "ppcle"d : "ppcle"d,
            "ppc32le"d : "ppc32le"d,
            "powerpc64"d : "powerpc64"d,
            "ppu"d : "ppu"d,
            "ppc64"d : "ppc64"d,
            "powerpc64le"d : "powerpc64le"d,
            "ppc64le"d : "ppc64le"d,
            "xscale"d : "xscale"d,
            "xscaleeb"d : "xscaleeb"d,
            "aarch64"d : "aarch64"d,
            "aarch64_be"d : "aarch64_be"d,
            "aarch64_32"d : "aarch64_32"d,
            "arc"d : "arc"d,
            "arm64"d : "arm64"d,
            "arm64_32"d : "arm64_32"d,
            "arm64e"d : "arm64e"d,
            "arm"d : "arm"d,
            "armeb"d : "armeb"d,
            "thumb"d : "thumb"d,
            "thumbeb"d : "thumbeb"d,
            "avr"d : "avr"d,
            "m68k"d : "m68k"d,
            "msp430"d : "msp430"d,
            "mips"d : "mips"d,
            "mipseb"d : "mipseb"d,
            "mipsallegrex"d : "mipsallegrex"d,
            "mipsisa32r6"d : "mipsisa32r6"d,
            "mipsr6"d : "mipsr6"d,
            "mipsel"d : "mipsel"d,
            "mipsallegrexel"d : "mipsallegrexel"d,
            "mipsisa32r6el"d : "mipsisa32r6el"d,
            "mipsr6el"d : "mipsr6el"d,
            "mips64"d : "mips64"d,
            "mips64eb"d : "mips64eb"d,
            "mipsn32"d : "mipsn32"d,
            "mipsisa64r6"d : "mipsisa64r6"d,
            "mips64r6"d : "mips64r6"d,
            "mipsn32r6"d : "mipsn32r6"d,
            "mips64el"d : "mips64el"d,
            "mipsn32el"d : "mipsn32el"d,
            "mipsisa64r6el"d : "mipsisa64r6el"d,
            "mips64r6el"d : "mips64r6el"d,
            "mipsn32r6el"d : "mipsn32r6el"d,
            "r600"d : "r600"d,
            "amdgcn"d : "amdgcn"d,
            "riscv32"d : "riscv32"d,
            "riscv64"d : "riscv64"d,
            "hexagon"d : "hexagon"d,
            "s390x"d : "s390x"d,
            "systemz"d : "systemz"d,
            "sparc"d : "sparc"d,
            "sparcel"d : "sparcel"d,
            "sparcv9"d : "sparcv9"d,
            "sparc64"d : "sparc64"d,
            "tce"d : "tce"d,
            "tcele"d : "tcele"d,
            "xcore"d : "xcore"d,
            "nvptx"d : "nvptx"d,
            "nvptx64"d : "nvptx64"d,
            "le32"d : "le32"d,
            "le64"d : "le64"d,
            "amdil"d : "amdil"d,
            "amdil64"d : "amdil64"d,
            "hsail"d : "hsail"d,
            "hsail64"d : "hsail64"d,
            "spir"d : "spir"d,
            "spir64"d : "spir64"d,
            "lanai"d : "lanai"d,
            "renderscript32"d : "renderscript32"d,
            "renderscript64"d : "renderscript64"d,
            "shave"d : "shave"d,
            "ve"d : "ve"d,
            "wasm32"d : "wasm32"d,
            "wasm64"d : "wasm64"d,
            "csky"d : "csky"d,
            "aarch32"d : "aarch32"d,
            "aarch32_eb"d : "aarch32_eb"d,
            "aarch64_eb"d : "aarch64_eb"d,
            "arm64eb"d : "arm64eb"d,
            "bpf"d : "bpf"d,
            "bpf_be"d : "bpf_be"d,
            "bpfeb"d : "bpfeb"d,
            "bpf_le"d : "bpf_le"d,
            "bpfel"d : "bpfel"d,
            "kalimba"d : "kalimba"d,
            "kalimba3"d : "kalimba3"d,
            "kalimba4"d : "kalimba4"d,
            "kalimba5"d : "kalimba5"d,
            "invalid"d : "invalid"d,
            "armv2"d : "armv2"d,
            "armv2a"d : "armv2a"d,
            "armv3"d : "armv3"d,
            "armv3m"d : "armv3m"d,
            "armv4"d : "armv4"d,
            "armv4t"d : "armv4t"d,
            "armv5t"d : "armv5t"d,
            "armv5te"d : "armv5te"d,
            "armv5tej"d : "armv5tej"d,
            "armv6"d : "armv6"d,
            "armv6k"d : "armv6k"d,
            "armv6t2"d : "armv6t2"d,
            "armv6kz"d : "armv6kz"d,
            "armv6-m"d : "armv6-m"d,
            "armv7-a"d : "armv7-a"d,
            "armv7ve"d : "armv7ve"d,
            "armv7-r"d : "armv7-r"d,
            "armv7-m"d : "armv7-m"d,
            "armv7e-m"d : "armv7e-m"d,
            "armv8-a"d : "armv8-a"d,
            "armv8.1-a"d : "armv8.1-a"d,
            "armv8.2-a"d : "armv8.2-a"d,
            "armv8.3-a"d : "armv8.3-a"d,
            "armv8.4-a"d : "armv8.4-a"d,
            "armv8.5-a"d : "armv8.5-a"d,
            "armv8.6-a"d : "armv8.6-a"d,
            "armv8.7-a"d : "armv8.7-a"d,
            "armv8-r"d : "armv8-r"d,
            "armv8-m.base"d : "armv8-m.base"d,
            "armv8-m.main"d : "armv8-m.main"d,
            "armv8.1-m.main"d : "armv8.1-m.main"d,
            "iwmmxt"d : "iwmmxt"d,
            "iwmmxt2"d : "iwmmxt2"d,
            "armv7s"d : "armv7s"d,
            "armv7k"d : "armv7k"d
        ];
        ···tempS·0·_28.paramType = 诊断集_.选项;
        ···tempS·0·_28.category = 诊断集_.项目配置;
        ···tempS·0·_28.description = 诊断集_.设置源码编译目标架构;
    }
    命令行选项_ ···tempS·0·_29;
    {
        ···tempS·0·_29.name = "环境"d;
        ···tempS·0·_29.type = "Map"d;
        ···tempS·0·_29.types = [
            "eabihf"d : "eabihf"d,
            "eabi"d : "eabi"d,
            "gnuabin32"d : "gnuabin32"d,
            "gnuabi64"d : "gnuabi64"d,
            "gnueabihf"d : "gnueabihf"d,
            "gnueabi"d : "gnueabi"d,
            "gnux32"d : "gnux32"d,
            "gnu_ilp32"d : "gnu_ilp32"d,
            "code16"d : "code16"d,
            "gnu"d : "gnu"d,
            "android"d : "android"d,
            "musleabihf"d : "musleabihf"d,
            "musleabi"d : "musleabi"d,
            "muslx32"d : "muslx32"d,
            "musl"d : "musl"d,
            "msvc"d : "msvc"d,
            "itanium"d : "itanium"d,
            "cygnus"d : "cygnus"d,
            "coreclr"d : "coreclr"d,
            "simulator"d : "simulator"d,
            "macabi"d : "macabi"d
        ];
        ···tempS·0·_29.paramType = 诊断集_.选项;
        ···tempS·0·_29.category = 诊断集_.项目配置;
        ···tempS·0·_29.description = 诊断集_.设置运行环境;
    }
    命令行选项_ ···tempS·0·_30;
    {
        ···tempS·0·_30.name = "主页"d;
        ···tempS·0·_30.type = "string"d;
        ···tempS·0·_30.paramType = 诊断集_.选项;
        ···tempS·0·_30.category = 诊断集_.项目配置;
        ···tempS·0·_30.description = 诊断集_.项目主页;
    }
    命令行选项_ ···tempS·0·_31;
    命令行选项_ ···tempS·0·_32;
    {
        ···tempS·0·_32.name = "姓名"d;
        ···tempS·0·_32.type = "string"d;
        ···tempS·0·_32.paramType = 诊断集_.选项;
        ···tempS·0·_32.category = 诊断集_.项目配置;
        ···tempS·0·_32.description = 诊断集_.开发者姓名;
    }
    命令行选项_ ···tempS·0·_33;
    {
        ···tempS·0·_33.name = "公司"d;
        ···tempS·0·_33.type = "string"d;
        ···tempS·0·_33.paramType = 诊断集_.选项;
        ···tempS·0·_33.category = 诊断集_.项目配置;
        ···tempS·0·_33.description = 诊断集_.开发公司;
    }
    命令行选项_ ···tempS·0·_34;
    {
        ···tempS·0·_34.name = "邮箱"d;
        ···tempS·0·_34.type = "string"d;
        ···tempS·0·_34.paramType = 诊断集_.选项;
        ···tempS·0·_34.category = 诊断集_.项目配置;
        ···tempS·0·_34.description = 诊断集_.公开邮箱;
    }
    命令行选项_ ···tempS·0·_35;
    {
        ···tempS·0·_35.name = "博客"d;
        ···tempS·0·_35.type = "string"d;
        ···tempS·0·_35.paramType = 诊断集_.选项;
        ···tempS·0·_35.category = 诊断集_.项目配置;
        ···tempS·0·_35.description = 诊断集_.公开博客;
    }
    {
        ···tempS·0·_31.name = "作者"d;
        ···tempS·0·_31.type = "object"d;
        ···tempS·0·_31.elementOptions = [
            "姓名"d : ···tempS·0·_32,
            "公司"d : ···tempS·0·_33,
            "邮箱"d : ···tempS·0·_34,
            "博客"d : ···tempS·0·_35
        ];
        ···tempS·0·_31.paramType = 诊断集_.选项;
        ···tempS·0·_31.category = 诊断集_.项目配置;
        ···tempS·0·_31.description = 诊断集_.开发单位;
    }
    命令行选项_ ···tempS·0·_36;
    命令行选项_* ···tempS·0·_37 = new 命令行选项_;
    命令行选项_ ···tempS·0·_38;
    {
        ···tempS·0·_38.name = "姓名"d;
        ···tempS·0·_38.type = "string"d;
        ···tempS·0·_38.paramType = 诊断集_.选项;
        ···tempS·0·_38.category = 诊断集_.项目配置;
        ···tempS·0·_38.description = 诊断集_.开发者姓名;
    }
    命令行选项_ ···tempS·0·_39;
    {
        ···tempS·0·_39.name = "公司"d;
        ···tempS·0·_39.type = "string"d;
        ···tempS·0·_39.paramType = 诊断集_.选项;
        ···tempS·0·_39.category = 诊断集_.项目配置;
        ···tempS·0·_39.description = 诊断集_.开发公司;
    }
    命令行选项_ ···tempS·0·_40;
    {
        ···tempS·0·_40.name = "邮箱"d;
        ···tempS·0·_40.type = "string"d;
        ···tempS·0·_40.paramType = 诊断集_.选项;
        ···tempS·0·_40.category = 诊断集_.项目配置;
        ···tempS·0·_40.description = 诊断集_.公开邮箱;
    }
    命令行选项_ ···tempS·0·_41;
    {
        ···tempS·0·_41.name = "博客"d;
        ···tempS·0·_41.type = "string"d;
        ···tempS·0·_41.paramType = 诊断集_.选项;
        ···tempS·0·_41.category = 诊断集_.项目配置;
        ···tempS·0·_41.description = 诊断集_.公开博客;
    }
    {
        ···tempS·0·_37.name = "作者"d;
        ···tempS·0·_37.type = "object"d;
        ···tempS·0·_37.elementOptions = [
            "姓名"d : ···tempS·0·_38,
            "公司"d : ···tempS·0·_39,
            "邮箱"d : ···tempS·0·_40,
            "博客"d : ···tempS·0·_41
        ];
        ···tempS·0·_37.paramType = 诊断集_.选项;
        ···tempS·0·_37.category = 诊断集_.项目配置;
        ···tempS·0·_37.description = 诊断集_.开发单位;
    }
    {
        ···tempS·0·_36.name = "贡献"d;
        ···tempS·0·_36.type = "list"d;
        ···tempS·0·_36.element = ···tempS·0·_37;
        ···tempS·0·_36.paramType = 诊断集_.选项;
        ···tempS·0·_36.category = 诊断集_.项目配置;
        ···tempS·0·_36.description = 诊断集_.贡献者名单;
    }
    命令行选项_ ···tempS·0·_42;
    {
        ···tempS·0·_42.name = "依赖"d;
        ···tempS·0·_42.type = "object"d;
        ···tempS·0·_42.paramType = 诊断集_.选项;
        ···tempS·0·_42.category = 诊断集_.项目配置;
        ···tempS·0·_42.description = 诊断集_.外部依赖模块名称及版本;
    }
    模块选项 = [
        ···tempS·0·_23,
        ···tempS·0·_24,
        ···tempS·0·_25,
        ···tempS·0·_26,
        ···tempS·0·_27,
        ···tempS·0·_28,
        ···tempS·0·_29,
        ···tempS·0·_30,
        ···tempS·0·_31,
        ···tempS·0·_36,
        ···tempS·0·_42
    ];
    命令行选项_ ···tempS·0·_43;
    {
        ···tempS·0·_43.name = "详细"d;
        ···tempS·0·_43.shortName = "ver"d;
        ···tempS·0·_43.category = 诊断集_.命令行选项;
        ···tempS·0·_43.description = 诊断集_.启用详细日志;
        ···tempS·0·_43.type = "boolean"d;
    }
    命令行选项_ ···tempS·0·_44;
    {
        ···tempS·0·_44.name = "清屏"d;
        ···tempS·0·_44.shortName = "d"d;
        ···tempS·0·_44.category = 诊断集_.命令行选项;
        ···tempS·0·_44.description = 诊断集_.显示将生成的内容_如果使用_清除_指定_则删除;
        ···tempS·0·_44.type = "boolean"d;
    }
    命令行选项_ ···tempS·0·_45;
    {
        ···tempS·0·_45.name = "强制"d;
        ···tempS·0·_45.shortName = "f"d;
        ···tempS·0·_45.category = 诊断集_.命令行选项;
        ···tempS·0·_45.description = 诊断集_.强制构建所有项目;
        ···tempS·0·_45.type = "boolean"d;
    }
    命令行选项_ ···tempS·0·_46;
    {
        ···tempS·0·_46.name = "清除"d;
        ···tempS·0·_46.category = 诊断集_.命令行选项;
        ···tempS·0·_46.description = 诊断集_.删除所有项目的输出;
        ···tempS·0·_46.type = "boolean"d;
    }
    命令行选项_ ···tempS·0·_47;
    {
        ···tempS·0·_47.name = "增量"d;
        ···tempS·0·_47.shortName = "i"d;
        ···tempS·0·_47.type = "boolean"d;
        ···tempS·0·_47.category = 诊断集_.命令行选项;
        ···tempS·0·_47.description = 诊断集_.Enable_incremental_compilation;
    }
    构建选项 = ··spread!(命令行选项_)(cast()(.选项声明组), cast()(.模块选项), [···tempS·0·_43, ···tempS·0·_44, ···tempS·0·_45, ···tempS·0·_46, ···tempS·0·_47]);
    统一码标识符头字符范围表 = [65, 90, 97, 122, 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 895, 895, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1327, 1329, 1366, 1369, 1369, 1376, 1416, 1488, 1514, 1519, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2144, 2154, 2208, 2228, 2230, 2237, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2432, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2556, 2556, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2809, 2809, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3129, 3133, 3133, 3160, 3162, 3168, 3169, 3200, 3200, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3412, 3414, 3423, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3718, 3722, 3724, 3747, 3749, 3749, 3751, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5109, 5112, 5117, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5880, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6264, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6430, 6480, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7296, 7304, 7312, 7354, 7357, 7359, 7401, 7404, 7406, 7411, 7413, 7414, 7418, 7418, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12443, 12447, 12449, 12538, 12540, 12543, 12549, 12591, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40943, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42653, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42943, 42946, 42950, 42999, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43261, 43262, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43488, 43492, 43494, 43503, 43514, 43518, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43646, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43824, 43866, 43868, 43879, 43888, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786, 65856, 65908, 66176, 66204, 66208, 66256, 66304, 66335, 66349, 66378, 66384, 66421, 66432, 66461, 66464, 66499, 66504, 66511, 66513, 66517, 66560, 66717, 66736, 66771, 66776, 66811, 66816, 66855, 66864, 66915, 67072, 67382, 67392, 67413, 67424, 67431, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669, 67680, 67702, 67712, 67742, 67808, 67826, 67828, 67829, 67840, 67861, 67872, 67897, 67968, 68023, 68030, 68031, 68096, 68096, 68112, 68115, 68117, 68119, 68121, 68149, 68192, 68220, 68224, 68252, 68288, 68295, 68297, 68324, 68352, 68405, 68416, 68437, 68448, 68466, 68480, 68497, 68608, 68680, 68736, 68786, 68800, 68850, 68864, 68899, 69376, 69404, 69415, 69415, 69424, 69445, 69600, 69622, 69635, 69687, 69763, 69807, 69840, 69864, 69891, 69926, 69956, 69956, 69968, 70002, 70006, 70006, 70019, 70066, 70081, 70084, 70106, 70106, 70108, 70108, 70144, 70161, 70163, 70187, 70272, 70278, 70280, 70280, 70282, 70285, 70287, 70301, 70303, 70312, 70320, 70366, 70405, 70412, 70415, 70416, 70419, 70440, 70442, 70448, 70450, 70451, 70453, 70457, 70461, 70461, 70480, 70480, 70493, 70497, 70656, 70708, 70727, 70730, 70751, 70751, 70784, 70831, 70852, 70853, 70855, 70855, 71040, 71086, 71128, 71131, 71168, 71215, 71236, 71236, 71296, 71338, 71352, 71352, 71424, 71450, 71680, 71723, 71840, 71903, 71935, 71935, 72096, 72103, 72106, 72144, 72161, 72161, 72163, 72163, 72192, 72192, 72203, 72242, 72250, 72250, 72272, 72272, 72284, 72329, 72349, 72349, 72384, 72440, 72704, 72712, 72714, 72750, 72768, 72768, 72818, 72847, 72960, 72966, 72968, 72969, 72971, 73008, 73030, 73030, 73056, 73061, 73063, 73064, 73066, 73097, 73112, 73112, 73440, 73458, 73728, 74649, 74752, 74862, 74880, 75075, 77824, 78894, 82944, 83526, 92160, 92728, 92736, 92766, 92880, 92909, 92928, 92975, 92992, 92995, 93027, 93047, 93053, 93071, 93760, 93823, 93952, 94026, 94032, 94032, 94099, 94111, 94176, 94177, 94179, 94179, 94208, 100343, 100352, 101106, 110592, 110878, 110928, 110930, 110948, 110951, 110960, 111355, 113664, 113770, 113776, 113788, 113792, 113800, 113808, 113817, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779, 123136, 123180, 123191, 123197, 123214, 123214, 123584, 123627, 124928, 125124, 125184, 125251, 125259, 125259, 126464, 126467, 126469, 126495, 126497, 126498, 126500, 126500, 126503, 126503, 126505, 126514, 126516, 126519, 126521, 126521, 126523, 126523, 126530, 126530, 126535, 126535, 126537, 126537, 126539, 126539, 126541, 126543, 126545, 126546, 126548, 126548, 126551, 126551, 126553, 126553, 126555, 126555, 126557, 126557, 126559, 126559, 126561, 126562, 126564, 126564, 126567, 126570, 126572, 126578, 126580, 126583, 126585, 126588, 126590, 126590, 126592, 126601, 126603, 126619, 126625, 126627, 126629, 126633, 126635, 126651, 131072, 173782, 173824, 177972, 177984, 178205, 178208, 183969, 183984, 191456, 194560, 195101];
    统一码标识符中间符范围表 = [48, 57, 65, 90, 95, 95, 97, 122, 170, 170, 181, 181, 182, 182, 184, 184, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 895, 895, 902, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1327, 1329, 1366, 1369, 1369, 1376, 1416, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1519, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2045, 2045, 2048, 2093, 2112, 2139, 2144, 2154, 2208, 2228, 2230, 2237, 2259, 2273, 2275, 2403, 2406, 2415, 2417, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2556, 2556, 2558, 2558, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2809, 2815, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3072, 3084, 3086, 3088, 3090, 3112, 3114, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3162, 3168, 3171, 3174, 3183, 3200, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3328, 3331, 3333, 3340, 3342, 3344, 3346, 3396, 3398, 3400, 3402, 3406, 3412, 3415, 3423, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3558, 3567, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3718, 3722, 3724, 3747, 3749, 3749, 3751, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4969, 4977, 4992, 5007, 5024, 5109, 5112, 5117, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5880, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6264, 6272, 6314, 6320, 6389, 6400, 6430, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6618, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6832, 6845, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7296, 7304, 7312, 7354, 7357, 7359, 7376, 7378, 7380, 7418, 7424, 7673, 7675, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12447, 12449, 12538, 12540, 12543, 12549, 12591, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40943, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42737, 42775, 42783, 42786, 42888, 42891, 42943, 42946, 42950, 42999, 43047, 43072, 43123, 43136, 43205, 43216, 43225, 43232, 43255, 43259, 43259, 43261, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43488, 43518, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43824, 43866, 43868, 43879, 43888, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65071, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786, 65856, 65908, 66045, 66045, 66176, 66204, 66208, 66256, 66272, 66272, 66304, 66335, 66349, 66378, 66384, 66426, 66432, 66461, 66464, 66499, 66504, 66511, 66513, 66517, 66560, 66717, 66720, 66729, 66736, 66771, 66776, 66811, 66816, 66855, 66864, 66915, 67072, 67382, 67392, 67413, 67424, 67431, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669, 67680, 67702, 67712, 67742, 67808, 67826, 67828, 67829, 67840, 67861, 67872, 67897, 67968, 68023, 68030, 68031, 68096, 68099, 68101, 68102, 68108, 68115, 68117, 68119, 68121, 68149, 68152, 68154, 68159, 68159, 68192, 68220, 68224, 68252, 68288, 68295, 68297, 68326, 68352, 68405, 68416, 68437, 68448, 68466, 68480, 68497, 68608, 68680, 68736, 68786, 68800, 68850, 68864, 68903, 68912, 68921, 69376, 69404, 69415, 69415, 69424, 69456, 69600, 69622, 69632, 69702, 69734, 69743, 69759, 69818, 69840, 69864, 69872, 69881, 69888, 69940, 69942, 69951, 69956, 69958, 69968, 70003, 70006, 70006, 70016, 70084, 70089, 70092, 70096, 70106, 70108, 70108, 70144, 70161, 70163, 70199, 70206, 70206, 70272, 70278, 70280, 70280, 70282, 70285, 70287, 70301, 70303, 70312, 70320, 70378, 70384, 70393, 70400, 70403, 70405, 70412, 70415, 70416, 70419, 70440, 70442, 70448, 70450, 70451, 70453, 70457, 70459, 70468, 70471, 70472, 70475, 70477, 70480, 70480, 70487, 70487, 70493, 70499, 70502, 70508, 70512, 70516, 70656, 70730, 70736, 70745, 70750, 70751, 70784, 70853, 70855, 70855, 70864, 70873, 71040, 71093, 71096, 71104, 71128, 71133, 71168, 71232, 71236, 71236, 71248, 71257, 71296, 71352, 71360, 71369, 71424, 71450, 71453, 71467, 71472, 71481, 71680, 71738, 71840, 71913, 71935, 71935, 72096, 72103, 72106, 72151, 72154, 72161, 72163, 72164, 72192, 72254, 72263, 72263, 72272, 72345, 72349, 72349, 72384, 72440, 72704, 72712, 72714, 72758, 72760, 72768, 72784, 72793, 72818, 72847, 72850, 72871, 72873, 72886, 72960, 72966, 72968, 72969, 72971, 73014, 73018, 73018, 73020, 73021, 73023, 73031, 73040, 73049, 73056, 73061, 73063, 73064, 73066, 73102, 73104, 73105, 73107, 73112, 73120, 73129, 73440, 73462, 73728, 74649, 74752, 74862, 74880, 75075, 77824, 78894, 82944, 83526, 92160, 92728, 92736, 92766, 92768, 92777, 92880, 92909, 92912, 92916, 92928, 92982, 92992, 92995, 93008, 93017, 93027, 93047, 93053, 93071, 93760, 93823, 93952, 94026, 94031, 94087, 94095, 94111, 94176, 94177, 94179, 94179, 94208, 100343, 100352, 101106, 110592, 110878, 110928, 110930, 110948, 110951, 110960, 111355, 113664, 113770, 113776, 113788, 113792, 113800, 113808, 113817, 113821, 113822, 119141, 119145, 119149, 119154, 119163, 119170, 119173, 119179, 119210, 119213, 119362, 119364, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779, 120782, 120831, 121344, 121398, 121403, 121452, 121461, 121461, 121476, 121476, 121499, 121503, 121505, 121519, 122880, 122886, 122888, 122904, 122907, 122913, 122915, 122916, 122918, 122922, 123136, 123180, 123184, 123197, 123200, 123209, 123214, 123214, 123584, 123641, 124928, 125124, 125136, 125142, 125184, 125259, 125264, 125273, 126464, 126467, 126469, 126495, 126497, 126498, 126500, 126500, 126503, 126503, 126505, 126514, 126516, 126519, 126521, 126521, 126523, 126523, 126530, 126530, 126535, 126535, 126537, 126537, 126539, 126539, 126541, 126543, 126545, 126546, 126548, 126548, 126551, 126551, 126553, 126553, 126555, 126555, 126557, 126557, 126559, 126559, 126561, 126562, 126564, 126564, 126567, 126570, 126572, 126578, 126580, 126583, 126585, 126588, 126590, 126590, 126592, 126601, 126603, 126619, 126625, 126627, 126629, 126633, 126635, 126651, 131072, 173782, 173824, 177972, 177984, 178205, 178208, 183969, 183984, 191456, 194560, 195101, 917760, 917999];
    命令行选项_ ···tempS·0·_48;
    {
        ···tempS·0·_48.name = "保存时编译"d;
        ···tempS·0·_48.type = "boolean"d;
    }
    _保存时编译选项 = ···tempS·0·_48;
}
class Klang设置扫描_ : 设置扫描_ {
    TK 语言目标;
    this() { }
    this(TK 目标) {
        this.语言目标 = 目标;
    }
    dstring[] 文本引号组() {
        return ["\""d, "'"d, "`"d];
    }
    dchar[][] 文本内部关注字符() {
        return [[], [], [cast(dchar)'$']];
    }
    bool[] 引号内文本是否可换行设置组() {
        return [false, false, true];
    }
    dstring 单行注释头() {
        return "//"d;
    }
    dstring 多行注释头() {
        return "/*"d;
    }
    dstring 多行注释尾() {
        return "*/"d;
    }
    dstring[] 组合令牌设置() {
        return 组合令牌文本;
    }
    dchar[] 单行注释内特殊关注字符() {
        return [];
    }
    dchar[] 多行注释内特殊关注字符() {
        return [cast(dchar)'@'];
    }
    TK 获取语言目标() {
        return this.语言目标;
    }
    标识符字符判断函数_ 获取标识符开始判断函数() {
        return cast(标识符字符判断函数_)(·fd(&.是标识符开始));
    }
    标识符字符判断函数_ 获取标识符片段片段函数() {
        return cast(标识符字符判断函数_)(·fd(&.是标识符片段));
    }
}
class klang前端接口_ : 前端接口_ {
    dstring 语言id;
    TK 前端目标;
    扩展名_[] 支持的扩展;
    配置文件名_[] 语言配置文件名;
    命令行选项_[] 编译选项组;
    this() { }
    this(dstring 语言id) {
        this.语言id = 语言id;
        this.前端目标 = 注册.注册前端语言(语言id);
        .语言前端目标 = this.前端目标;
        this.支持的扩展 = [扩展名_.DK, 扩展名_.K];
        this.语言配置文件名 = [配置文件名_.Klang, 配置文件名_.KlangMod];
        this.编译选项组 = .构建选项;
    }
    前端编译器接口_ 创建前端编译器(编译器基类_ 编译) {
        return new 前端编译器_(编译);
    }
    基础节点.源文件_ 创建源文件(dstring 文件名, dstring 内容, 解析的模块名称_ 解析的 = ··null!(解析的模块名称_)) {
        节点.Klang源文件_ sou = 节点.创建源文件();
        sou.内容 = 内容;
        if (解析的 !is ··null!(解析的模块名称_)) {
            sou.源文件的包 = (cast(klang解析的模块名称_)(解析的));
        }
        return sou;
    }
    遍历节点函数类型_ 获取遍历节点() {
        return cast(遍历节点函数类型_)(·fd(&遍历节点));
    }
    检查源文件函数_ 获取检查源文件函数(程序主机接口_ 主机, bool 诊断, 诊断收集_ 诊断集) {
        return 创建klang检查(主机, 诊断, 诊断集);
    }
    初始源文件检查函数_ 获取源文件初始检查函数() {
        return cast(初始源文件检查函数_)(·fd(&源文件初始检查));
    }
    检查初始化函数_ 获取检查初始化函数() {
        return cast(检查初始化函数_)(·fd(&检查初始化));
    }
    dstring[] 获取支持的扩展() {
        return (cast(dstring[])(this.支持的扩展));
    }
    dstring[] 获取语言配置文件名() {
        return (cast(dstring[])(this.语言配置文件名));
    }
    命令行选项_ 获取根选项() {
        return .获取klang根选项();
    }
    设置扫描_ 获取扫描设置() {
        return new Klang设置扫描_(this.获取前端目标());
    }
    TK 获取前端目标() {
        return this.前端目标;
    }
    命令行选项_[] 获取编译选项组() {
        return this.编译选项组;
    }
    dstring 获取语言id() {
        return this.语言id;
    }
    bool 是监控设置(编译选项基类_ 选项) {
        if (选项.语言id == this.语言id) {
            编译选项_ 编译选项 = (cast(编译选项_)(选项));
            if ((编译选项 !is ··null!(编译选项_)) && 编译选项.监控 && 编译选项.监控 == true) {
                return true;
            }
        }
        return false;
    }
    dstring[] 获取默认支持库文件名组() {
        return [获取默认支持库名称()];
    }
    检查源文件函数_ 获取引用模块收集函数(编译主机接口_ 主机) {
        return 创建收集函数(主机);
    }
    解析的模块名称_[] 加载模块(dstring[] 模块名称组, dstring 包含文件) {
        return 加载klang模块(模块名称组, 包含文件);
    }
    绑定函数_ 获取绑定工作站(绑定子函数_ 绑定, 程序主机接口_ 主机) {
        return 创建绑定工作站(cast(绑定子函数_)(绑定), 主机);
    }
    绑定函数_ 获取绑定子工作站() {
        return 创建绑定子工作站();
    }
    清理函数_ 获取绑定清理() {
        return 创建绑定清理();
    }
    源文件准备函数_ 获取源文件输出准备函数() {
        return cast(源文件准备函数_)(·fd(&重新分组源文件));
    }
    打印机_ 创建输出打印机(TransformationResult r) {
        return klang创建输出打印机(r);
    }
    打印机_ 创建打印机(打印选项_ 选项, 打印助手_ 助手) {
        return klang创建打印机(选项, 助手);
    }
    输出转换组_ getTransformers() {
        转换工厂_!(基础节点.节点_)[] 转换工厂组 = 创建数组!(转换工厂_!(基础节点.节点_))();
        // 追加(转换工厂组, 转为输出文件());
        // 这里要根据编译选型设置 转换及 顺序
        .追加!(转换工厂_!(基础节点.节点_))(转换工厂组, .实例化转换工厂());
        // 最后一个转换器
        // 追加(转换工厂组, IR转换工厂());
        //追加(转换工厂组, 中间码转换工厂());
        转换工厂_!(基础节点.节点_)[] 声明转换组 = 创建数组!(转换工厂_!(基础节点.节点_))();
        .追加!(转换工厂_!(基础节点.节点_))(声明转换组, .声明转换工厂());
        // 返回 新建 输出转换组_(转换工厂组, 声明转换组);
        return new 输出转换组_(转换工厂组, 声明转换组);
    }
    bool 是应输出的文件(基础节点.源文件_ 文件) {
        return .是应输出的文件(文件);
    }
    long 获取词法种类数量() {
        return KSK.数量_;
    }
    转换支持_ 获取转换支持() {
        return new Klang转换支持_();
    }
}
bool 是统一码标识符开始(const(dchar) 字符代码) {
    return 在规范组内查找(字符代码, .统一码标识符头字符范围表);
}
bool 是统一码标识符片段(const(dchar) 字符代码) {
    return 在规范组内查找(字符代码, .统一码标识符中间符范围表);
}
bool 是标识符开始(const(dchar) ch) {
    return ch >= 字符_.A && ch <= 字符_.Z || ch >= 字符_.a && ch <= 字符_.z || ch == 字符_.下划线 || ch > 字符_.最大Ascii字符 && ch != 字符_.中点 && .是统一码标识符开始(ch);
}
bool 是标识符片段(const(dchar) ch) {
    return ch >= 字符_.A && ch <= 字符_.Z || ch >= 字符_.a && ch <= 字符_.z || ch >= 字符_.数_0 && ch <= 字符_.数_9 || ch == 字符_.下划线 || ch > 字符_.最大Ascii字符 && .是统一码标识符片段(ch);
}
转换工厂_!(基础节点.节点_) 转为输出文件() {
    return cast(转换工厂_!(基础节点.节点_))(·fd(&转为输出));
}
转换工厂_!(基础节点.节点_) 实例化转换工厂() {
    return cast(转换工厂_!(基础节点.节点_))(·fd(&实例化代码转换));
}
转换工厂_!(基础节点.节点_) IR转换工厂() {
    return cast(转换工厂_!(基础节点.节点_))(·fd(&转换IR));
}
转换工厂_!(基础节点.节点_) 声明转换工厂() {
    return cast(转换工厂_!(基础节点.节点_))(·fd(&声明转换));
}
转换工厂_!(基础节点.节点_) 中间码转换工厂() {
    return cast(转换工厂_!(基础节点.节点_))(·fd(&中间码转换));
}
void 初始化函数() {
    if (.初始化函数缓存 && !.已经初始化) {
        klang前端接口_ klang = new klang前端接口_(.语言id);
        assert(klang.语言id == .语言id && klang.前端目标 > 0, "语言注册错误"c);
        注册.注册前端(klang);
        .已经初始化 = true;
    }
}
int 启动函数(dstring[] 实参组) {
    .初始化函数();
    注册.当前前端 = 注册.获取注册的前端(.语言前端目标);
    编译的命令行_ 编译结果 = 命令行编译(实参组, cast(dstring delegate(dstring))(&系统.sys.读文件));
    if ((编译结果.错误组 !is ··null!(诊断_[])) && 编译结果.错误组.length > 0) {
        return 1;
    }
    编译选项_ 编译选项 = .解析编译选项(编译结果.选项);
    if (编译选项.初始) {
        dstring 编译配置内容 = .生成编译或项目配置文件(编译选项, 配置种类_.Klang, 系统.sys.新行);
        dstring 当前目录 = 系统.sys.获取当前目录();
        dstring 配置文件名 = 路径.正规化路径(路径.组合路径(当前目录, ["测试"d, 配置文件名_.Klang]));
        系统.sys.写文件(配置文件名, 编译配置内容);
        编译选项 = .解析编译选项(编译结果.选项, 配置种类_.KlangModConfig);
        dstring 模块配置内容 = .生成编译或项目配置文件(编译选项, 配置种类_.KlangModConfig, 系统.sys.新行);
        dstring 模块配置文件名 = 路径.正规化路径(路径.组合路径(当前目录, ["测试"d, 配置文件名_.KlangMod]));
        系统.sys.写文件(模块配置文件名, 模块配置内容);
    }
    if (编译选项.配置文件 is ··null!(dstring)) {
        dstring 配置目录 = 系统.sys.获取当前目录() ~ "/测试"d;
        编译选项.配置文件 = 查找配置文件(配置目录, cast(bool delegate(dstring))(&系统.sys.文件存在), 配置文件名_.Klang);
    }
    if (编译选项.配置文件 !is ··null!(dstring)) {
        编译的命令行_ 配置文件编译结果 = 编译配置文件(编译选项.配置文件, cast(dstring delegate(dstring))(&系统.sys.读文件), .获取klang根选项());
        if ((配置文件编译结果.错误组 !is ··null!(诊断_[])) && 配置文件编译结果.错误组.length > 0) {
            return 1;
        }
        if (配置文件编译结果.选项.类型 == JSON类型_.对象_) {
            JSON值_[dstring] op = 配置文件编译结果.选项.对象_;
            if (.具有!(JSON值_, dstring)(op, "编译选项"d) !is ··null!(JSON值_*)) {
                配置文件编译结果.选项 = 配置文件编译结果.选项.获取属性("编译选项"d);
            }
        }
        编译选项_ 配置文件选项 = .解析编译选项(配置文件编译结果.选项);
        编译选项 = .合并编译选项(配置文件选项, 编译选项);
    }
    dstring 模块配置文件 = 查找配置文件(系统.sys.获取当前目录() ~ "/测试"d, cast(bool delegate(dstring))(&系统.sys.文件存在), 配置文件名_.KlangMod);
    if (模块配置文件 !is ··null!(dstring)) {
        编译的命令行_ 模块配置编译结果 = 编译配置文件(模块配置文件, cast(dstring delegate(dstring))(&系统.sys.读文件), .获取klang模块根选项());
        if ((模块配置编译结果.错误组 !is ··null!(诊断_[])) && 模块配置编译结果.错误组.length > 0) {
            return 1;
        }
        编译选项_ 模块配置选项 = .解析编译选项(模块配置编译结果.选项, 配置种类_.KlangModConfig);
        编译选项 = .合并编译选项(模块配置选项, 编译选项);
    }
    if ((编译选项.架构 !is ··null!(dstring)) || (编译选项.系统 !is ··null!(dstring)) || (编译选项.环境 !is ··null!(dstring)) || (编译选项.支持 !is ··null!(dstring)) || (编译选项.平台 !is ··null!(dstring)) || (编译选项.输出模式 !is ··null!(dstring))) {
        dstring[] 目标平台组件 = 创建数组!(dstring)();
        if (编译选项.架构 !is ··null!(dstring)) {
            .追加!(dstring)(目标平台组件, 编译选项.架构);
        }
        if (编译选项.支持 !is ··null!(dstring)) {
            .追加!(dstring)(目标平台组件, 编译选项.支持);
        }
        if (编译选项.系统 !is ··null!(dstring)) {
            dstring xt = 编译选项.系统;
            if (编译选项.系统版本 !is ··null!(dstring)) {
                xt ~= 编译选项.系统版本;
            }
            .追加!(dstring)(目标平台组件, xt);
        }
        if ((编译选项.环境 !is ··null!(dstring)) && (编译选项.平台 !is ··null!(dstring))) {
            dstring 环境 = 编译选项.环境;
            if (编译选项.环境版本 !is ··null!(dstring)) {
                环境 ~= 编译选项.环境版本;
            }
            环境 ~= 编译选项.平台.·to!(dstring)();
            .追加!(dstring)(目标平台组件, 环境);
        }
        else if (编译选项.环境 !is ··null!(dstring)) {
            dstring 环境 = 编译选项.环境;
            if (编译选项.环境版本 !is ··null!(dstring)) {
                环境 ~= 编译选项.环境版本;
            }
            .追加!(dstring)(目标平台组件, 环境);
        }
        if (编译选项.平台 !is ··null!(dstring)) {
            .追加!(dstring)(目标平台组件, 编译选项.平台);
        }
        编译选项.目标平台 = 编译目标平台内容(连接(目标平台组件, "-"d));
        dstring[] 定义 = 编译选项.定义;
        if (定义 is ··null!(dstring[])) {
            定义 = 创建数组!(dstring)();
        }
        ArchType arch = 编译选项.目标平台.Arch;
        switch (arch) {
            case ArchType.arm:
            case ArchType.armeb: {
                .追加!(dstring)(定义, "ARM"d, "ARM_SoftFloat"d);
                break;
            }
            case ArchType.aarch64:
            case ArchType.aarch64_be: {
                .追加!(dstring)(定义, "AArch64"d, "ARM_SoftFloat"d);
                break;
            }
            case ArchType.avr: {
                .追加!(dstring)(定义, "AVR"d, "D_SoftFloat"d);
                break;
            }
            case ArchType.mips:
            case ArchType.mipsel: {
                .追加!(dstring)(定义, "MIPS"d, "MIPS32"d, "MIPS_SoftFloat"d);
                break;
            }
            case ArchType.mips64:
            case ArchType.mips64el: {
                .追加!(dstring)(定义, "MIPS64"d, "MIPS_SoftFloat"d);
                break;
            }
            case ArchType.msp430: {
                .追加!(dstring)(定义, "MSP430"d);
                break;
            }
            case ArchType.ppc: {
                .追加!(dstring)(定义, "PPC"d, "PPC_SoftFloat"d);
                break;
            }
            case ArchType.ppc64:
            case ArchType.ppc64le: {
                .追加!(dstring)(定义, "PPC64"d, "PPC_SoftFloat"d);
                break;
            }
            case ArchType.riscv32: {
                .追加!(dstring)(定义, "RISCV32"d);
                break;
            }
            case ArchType.riscv64: {
                .追加!(dstring)(定义, "RISCV64"d);
                break;
            }
            case ArchType.sparc: {
                .追加!(dstring)(定义, "SPARC"d, "SPARC_SoftFloat"d);
                break;
            }
            case ArchType.sparcv9: {
                .追加!(dstring)(定义, "SPARC64"d, "SPARC_SoftFloat"d);
                break;
            }
            case ArchType.systemz: {
                .追加!(dstring)(定义, "SystemZ"d, "S390X"d, "D_HardFloat"d);
                break;
            }
            case ArchType.thumb: {
                .追加!(dstring)(定义, "ARM"d, "Thumb"d, "ARM_Thumb"d, "ARM_SoftFloat"d);
                break;
            }
            case ArchType.x86: {
                .追加!(dstring)(定义, "X86"d, "D_HardFloat"d);
                break;
            }
            case ArchType.x86_64: {
                .追加!(dstring)(定义, "X86_64"d, "D_HardFloat"d);
                break;
            }
            case ArchType.nvptx: {
                .追加!(dstring)(定义, "NVPTX"d, "D_HardFloat"d);
                break;
            }
            case ArchType.nvptx64: {
                .追加!(dstring)(定义, "NVPTX64"d, "D_HardFloat"d);
                break;
            }
            case ArchType.wasm32:
            case ArchType.wasm64: {
                .追加!(dstring)(定义, "WebAssembly"d);
                break;
            }
            default: break;
        }
        OSType Os = 编译选项.目标平台.OS;
        switch (Os) {
            case OSType.Darwin:
            case OSType.MacOSX: {
                .追加!(dstring)(定义, "OSX"d);
                .追加!(dstring)(定义, "darwin"d);
                .追加!(dstring)(定义, "Posix"d);
                .追加!(dstring)(定义, "CppRuntime_Clang"d);
                break;
            }
            case OSType.DragonFly: {
                .追加!(dstring)(定义, "DragonFlyBSD"d);
                .追加!(dstring)(定义, "Posix"d);
                .追加!(dstring)(定义, "CppRuntime_Gcc"d);
                break;
            }
            case OSType.FreeBSD: {
                .追加!(dstring)(定义, "FreeBSD"d);
                .追加!(dstring)(定义, "Posix"d);
                .追加!(dstring)(定义, "CppRuntime_Clang"d);
                break;
            }
            case OSType.IOS: {
                .追加!(dstring)(定义, "iOS"d);
                .追加!(dstring)(定义, "Posix"d);
                .追加!(dstring)(定义, "CppRuntime_Clang"d);
                break;
            }
            case OSType.Linux: {
                .追加!(dstring)(定义, "linux"d);
                .追加!(dstring)(定义, "Posix"d);
                if (getEnvironment(编译选项.目标平台) == EnvironmentType.Android) {
                    .追加!(dstring)(定义, "Android"d);
                    .追加!(dstring)(定义, "CRuntime_Bionic"d);
                }
                else if (isMusl(编译选项.目标平台)) {
                    .追加!(dstring)(定义, "CRuntime_Musl"d);
                    .追加!(dstring)(定义, "CppRuntime_Gcc"d);
                    .追加!(dstring)(定义, "DRuntime_Use_Libunwind"d);
                }
                else {
                    .追加!(dstring)(定义, "CRuntime_Glibc"d);
                    .追加!(dstring)(定义, "CppRuntime_Gcc"d);
                }
                break;
            }
            case OSType.NetBSD: {
                .追加!(dstring)(定义, "NetBSD"d);
                .追加!(dstring)(定义, "Posix"d);
                break;
            }
            case OSType.OpenBSD: {
                .追加!(dstring)(定义, "OpenBSD"d);
                .追加!(dstring)(定义, "Posix"d);
                .追加!(dstring)(定义, "CppRuntime_Gcc"d);
                break;
            }
            case OSType.Solaris: {
                .追加!(dstring)(定义, "Solaris"d);
                .追加!(dstring)(定义, "Posix"d);
                .追加!(dstring)(定义, "CppRuntime_Sun"d);
                break;
            }
            case OSType.Win32: {
                .追加!(dstring)(定义, "Windows"d);
                if (isArch64Bit(编译选项.目标平台)) {
                    .追加!(dstring)(定义, "Win64"d);
                }
                else {
                    .追加!(dstring)(定义, "Win32"d);
                }
                if (isWindowsMSVCEnvironment(编译选项.目标平台)) {
                    .追加!(dstring)(定义, "CRuntime_Microsoft"d, "CppRuntime_Microsoft"d);
                }
                if (isWindowsGNUEnvironment(编译选项.目标平台)) {
                    .追加!(dstring)(定义, "mingw32"d, "MinGW"d);
                }
                break;
            }
            case OSType.Haiku: {
                .追加!(dstring)(定义, "Haiku"d);
                .追加!(dstring)(定义, "Posix"d);
                break;
            }
            case OSType.AIX: {
                .追加!(dstring)(定义, "AIX"d);
                .追加!(dstring)(定义, "Posix"d);
                break;
            }
            case OSType.TvOS: {
                .追加!(dstring)(定义, "TVOS"d);
                .追加!(dstring)(定义, "Posix"d);
                .追加!(dstring)(定义, "CppRuntime_Clang"d);
                break;
            }
            case OSType.WatchOS: {
                .追加!(dstring)(定义, "WatchOS"d);
                .追加!(dstring)(定义, "Posix"d);
                .追加!(dstring)(定义, "CppRuntime_Clang"d);
                break;
            }
            case OSType.WASI: {
                .追加!(dstring)(定义, "WASI"d);
                .追加!(dstring)(定义, "CRuntime_WASI"d);
                break;
            }
            default: {
                .追加!(dstring)(定义, "FreeStanding"d, "CRuntime_Newlib"d);
                break;
            }
        }
        if (编译选项.输出模式 is ··null!(dstring)) {
            编译选项.输出模式 = "测试"d;
        }
        if (编译选项.输出模式 == "测试"d) {
            .追加!(dstring)(定义, "调试"d, "测试"d);
        }
        else if (编译选项.输出模式 == "调试"d) {
            .追加!(dstring)(定义, "调试"d);
        }
        else {
            .追加!(dstring)(定义, "发布"d);
        }
        编译选项.定义 = 定义;
    }
    if (编译选项.帮助) {
    }
    else if (编译选项.编译) {
    }
    else if (编译选项.源码 !is ··null!(dstring)) {
        dstring 当前目录 = 系统.sys.获取当前目录() ~ "/测试"d;
        dstring 源码目录 = 路径.正规化路径(路径.组合路径(当前目录, [编译选项.源码]));
        dstring[] 文件组 = 系统.sys.读目录(源码目录, [扩展名_.K]);
        文件组 = 过滤!(dstring)(文件组, (dstring f) { return 路径.获取任意一个扩展名从路径(f, [扩展名_.DK], 系统.sys.是使用区分大小写文件系统) != ".d.k2"d; });
        if ((文件组 is ··null!(dstring[])) || 文件组.length == 0) {
            return 0;
        }
        return .执行编译(注册.当前前端, 编译选项, 文件组);
    }
    else {
        dstring 当前目录 = 系统.sys.获取当前目录();
        dstring 源码目录 = 路径.正规化路径(路径.组合路径(当前目录, ["测试/源码"d]));
        if (!系统.sys.目录存在(源码目录)) {
            源码目录 = 路径.正规化路径(路径.组合路径(当前目录, ["测试/src"d]));
        }
        if (!系统.sys.目录存在(源码目录)) {
            return 0;
        }
        dstring[] 文件组 = 系统.sys.读目录(源码目录, [扩展名_.K]);
        文件组 = 过滤!(dstring)(文件组, (dstring f) { return 路径.获取任意一个扩展名从路径(f, [扩展名_.DK], 系统.sys.是使用区分大小写文件系统) != ".d.k2"d; });
        if ((文件组 is ··null!(dstring[])) || 文件组.length == 0) {
            return 0;
        }
        return .执行编译(注册.当前前端, 编译选项, 文件组);
    }
    return -1;
}
int 执行编译(前端接口_ 前端, 编译选项基类_ 编译选项, dstring[] 文件组) {
    程序主机接口_ 主机 = 创建主机(前端, 编译选项, 文件组);
    输出结果_ 输出结果 = 主机.输出(··null!(基础节点.源文件_));
    return 0;
}
bool 是应输出的文件(基础节点.源文件_ 文件) {
    if ((文件.标志 & 节点标志_.不输出文件) != 0) {
        return false;
    }
    return !((cast(节点.Klang源文件_)(文件)).是声明文件);
}
命令行选项_ 获取klang根选项() {
    if (._klang根选项 is ··null!(命令行选项_)) {
        命令行选项_ ···tempS·0·_49;
        命令行选项_ ···tempS·0·_50;
        {
            ···tempS·0·_50.name = "编译选项"d;
            ···tempS·0·_50.type = "object"d;
            ···tempS·0·_50.elementOptions = .命令行选项转词典(.构建选项);
            ···tempS·0·_50.extraKey诊断消息_ = 诊断集_.Unknown_compiler_option_0;
        }
        {
            ···tempS·0·_49.name = ""d;
            ···tempS·0·_49.type = "object"d;
            ···tempS·0·_49.elementOptions = .命令行选项转词典([
                ···tempS·0·_50,
                ._保存时编译选项
            ]);
        }
        ._klang根选项 = ···tempS·0·_49;
    }
    return ._klang根选项;
}
命令行选项_ 获取klang模块根选项() {
    if (._klangMod根信息 is ··null!(命令行选项_)) {
        命令行选项_ ···tempS·0·_51;
        {
            ···tempS·0·_51.name = ""d;
            ···tempS·0·_51.type = "object"d;
            ···tempS·0·_51.elementOptions = .命令行选项转词典(.模块选项);
        }
        ._klangMod根信息 = ···tempS·0·_51;
    }
    return ._klangMod根信息;
}
编译选项_ 获取默认编译选项(配置种类_ 配置种类) {
    if (配置种类 == 配置种类_.Klang) {
        编译选项_ op = new 编译选项_("klang"d);
        op.系统 = "windows"d;
        op.架构 = "x86_64"d;
        op.环境 = "msvc"d;
        op.支持 = "pc"d;
        op.定义 = ["__WIN__"d];
        op.输出 = new 路径.路径_("./输出"d);
        op.源码 = new 路径.路径_("./源码"d);
        return op;
    }
    else {
        编译选项_ op = new 编译选项_("klang"d);
        op.名称 = "klangApp"d;
        op.版本 = "0.0.1"d;
        op.主页 = "gitee.com/xxx/xxxx"d;
        op.依赖 = ["gitee.com/HTWX/编译数字"d : "0.0.1"d];
        作者_ ···tempS·0·_52;
        {
            ···tempS·0·_52.姓名 = "xxx"d;
            ···tempS·0·_52.公司 = "xxx"d;
        }
        op.作者 = ···tempS·0·_52;
        作者_ ···tempS·0·_53;
        {
            ···tempS·0·_53.姓名 = "xxx"d;
            ···tempS·0·_53.公司 = "xxx"d;
        }
        op.贡献 = [···tempS·0·_53];
        return op;
    }
}
命令行选项_[dstring] 命令行选项转词典(命令行选项_[] options) {
    return 数组转词典!(命令行选项_, 命令行选项_)(options, (命令行选项_ option) { return option.name; }, (命令行选项_ option) { return option; });
}
编译选项_ 解析编译选项(JSON值_ op, 配置种类_ 配置种类 = 配置种类_.Klang) {
    作者_ delegate(JSON值_[dstring]) 反序列化作者;
    编译选项_ 编译选项;
    作者_ 反序列化作者·func(JSON值_[dstring] 作者对象) {
        作者_ 作者;
        作者 = 作者_(""d);
        if (.具有!(JSON值_, dstring)(作者对象, "姓名"d) !is ··null!(JSON值_*)) {
            JSON值_ 姓名 = 作者对象["姓名"d];
            作者.姓名 = 姓名.文本_;
        }
        if (.具有!(JSON值_, dstring)(作者对象, "公司"d) !is ··null!(JSON值_*)) {
            JSON值_ 公司 = 作者对象["公司"d];
            作者.公司 = 公司.文本_;
        }
        if (.具有!(JSON值_, dstring)(作者对象, "邮箱"d) !is ··null!(JSON值_*)) {
            JSON值_ 邮箱 = 作者对象["邮箱"d];
            作者.邮箱 = 邮箱.文本_;
        }
        if (.具有!(JSON值_, dstring)(作者对象, "博客"d) !is ··null!(JSON值_*)) {
            JSON值_ 博客 = 作者对象["博客"d];
            作者.博客 = 博客.文本_;
        }
        return 作者;
    }
    反序列化作者 = &反序列化作者·func;
    编译选项 = .获取默认编译选项(配置种类);
    if (op.类型 == JSON类型_.数组_) {
        op = op.数组_[0];
    }
    if (op.类型 == JSON类型_.对象_) {
        JSON值_[dstring] opm = op.对象_;
        if (.具有!(JSON值_, dstring)(opm, "初始"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("初始"d);
            if (选项.类型 == JSON类型_.真_ || 选项.类型 == JSON类型_.假_) {
                编译选项.初始 = 选项.真假_;
            }
        }
        if (.具有!(JSON值_, dstring)(opm, "帮助"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("帮助"d);
            if (选项.类型 == JSON类型_.真_ || 选项.类型 == JSON类型_.假_) {
                编译选项.帮助 = 选项.真假_;
            }
        }
        if (.具有!(JSON值_, dstring)(opm, "版本号"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("版本号"d);
            if (选项.类型 == JSON类型_.真_ || 选项.类型 == JSON类型_.假_) {
                编译选项.版本号 = 选项.真假_;
            }
        }
        if (.具有!(JSON值_, dstring)(opm, "监控"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("监控"d);
            if (选项.类型 == JSON类型_.真_ || 选项.类型 == JSON类型_.假_) {
                编译选项.监控 = 选项.真假_;
            }
        }
        if (.具有!(JSON值_, dstring)(opm, "系统"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("系统"d);
            if (选项.类型 == JSON类型_.文本_) {
                编译选项.系统 = 转换系统设置(·to!(dstring)(选项.文本_));
            }
        }
        if (.具有!(JSON值_, dstring)(opm, "系统版本"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("系统版本"d);
            if (选项.类型 == JSON类型_.文本_) {
                编译选项.系统版本 = 选项.文本_;
            }
        }
        if (.具有!(JSON值_, dstring)(opm, "架构"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("架构"d);
            if (选项.类型 == JSON类型_.文本_) {
                编译选项.架构 = 转换架构设置(·to!(dstring)(选项.文本_));
            }
        }
        if (.具有!(JSON值_, dstring)(opm, "环境"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("环境"d);
            if (选项.类型 == JSON类型_.文本_) {
                编译选项.环境 = 转换环境设置(·to!(dstring)(选项.文本_));
            }
        }
        if (.具有!(JSON值_, dstring)(opm, "环境版本"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("环境版本"d);
            if (选项.类型 == JSON类型_.文本_) {
                编译选项.环境版本 = 选项.文本_;
            }
        }
        if (.具有!(JSON值_, dstring)(opm, "支持"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("支持"d);
            if (选项.类型 == JSON类型_.文本_) {
                编译选项.支持 = 转换支持设置(·to!(dstring)(选项.文本_));
            }
        }
        if (.具有!(JSON值_, dstring)(opm, "输出类型"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("输出类型"d);
            if (选项.类型 == JSON类型_.文本_) {
                编译选项.输出类型 = 转换输出类型设置(·to!(dstring)(选项.文本_));
            }
        }
        if (.具有!(JSON值_, dstring)(opm, "平台"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("平台"d);
            if (选项.类型 == JSON类型_.文本_) {
                编译选项.平台 = 转换平台设置(·to!(dstring)(选项.文本_));
            }
        }
        if (.具有!(JSON值_, dstring)(opm, "输出模式"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("输出模式"d);
            if (选项.类型 == JSON类型_.文本_) {
                编译选项.输出模式 = 转换输出模式设置(·to!(dstring)(选项.文本_));
            }
        }
        if (.具有!(JSON值_, dstring)(opm, "清屏"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("清屏"d);
            if (选项.类型 == JSON类型_.真_ || 选项.类型 == JSON类型_.假_) {
                编译选项.清屏 = 选项.真假_;
            }
        }
        if (.具有!(JSON值_, dstring)(opm, "强制"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("强制"d);
            if (选项.类型 == JSON类型_.真_ || 选项.类型 == JSON类型_.假_) {
                编译选项.强制 = 选项.真假_;
            }
        }
        if (.具有!(JSON值_, dstring)(opm, "详细"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("详细"d);
            if (选项.类型 == JSON类型_.真_ || 选项.类型 == JSON类型_.假_) {
                编译选项.详细 = 选项.真假_;
            }
        }
        if (.具有!(JSON值_, dstring)(opm, "清除"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("清除"d);
            if (选项.类型 == JSON类型_.真_ || 选项.类型 == JSON类型_.假_) {
                编译选项.清除 = 选项.真假_;
            }
        }
        if (.具有!(JSON值_, dstring)(opm, "增量"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("增量"d);
            if (选项.类型 == JSON类型_.真_ || 选项.类型 == JSON类型_.假_) {
                编译选项.增量 = 选项.真假_;
            }
        }
        if (.具有!(JSON值_, dstring)(opm, "启用诊断"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("启用诊断"d);
            if (选项.类型 == JSON类型_.真_ || 选项.类型 == JSON类型_.假_) {
                编译选项.启用诊断 = 选项.真假_;
            }
        }
        if (.具有!(JSON值_, dstring)(opm, "定义"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("定义"d);
            if (选项.类型 == JSON类型_.数组_) {
                dstring[] ret = [];
                foreach (JSON值_ s; 选项.数组_) {
                    .追加!(dstring)(ret, s.文本_);
                }
                编译选项.定义 = ret;
            }
        }
        if (.具有!(JSON值_, dstring)(opm, "彩色"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("彩色"d);
            if (选项.类型 == JSON类型_.真_ || 选项.类型 == JSON类型_.假_) {
                编译选项.彩色 = 选项.真假_;
            }
        }
        if (.具有!(JSON值_, dstring)(opm, "输出"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("输出"d);
            if (选项.类型 == JSON类型_.文本_) {
                编译选项.输出 = 选项.文本_;
            }
        }
        if (.具有!(JSON值_, dstring)(opm, "源码"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("源码"d);
            if (选项.类型 == JSON类型_.文本_) {
                编译选项.源码 = 选项.文本_;
            }
        }
        if (.具有!(JSON值_, dstring)(opm, "名称"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("名称"d);
            if (选项.类型 == JSON类型_.文本_) {
                编译选项.名称 = 选项.文本_;
            }
        }
        if (.具有!(JSON值_, dstring)(opm, "版本"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("版本"d);
            if (选项.类型 == JSON类型_.文本_) {
                编译选项.版本 = 选项.文本_;
            }
        }
        if (.具有!(JSON值_, dstring)(opm, "全局模块路径"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("全局模块路径"d);
            if (选项.类型 == JSON类型_.文本_) {
                编译选项.全局模块路径 = 选项.文本_;
            }
        }
        if (.具有!(JSON值_, dstring)(opm, "配置文件"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("配置文件"d);
            if (选项.类型 == JSON类型_.文本_) {
                编译选项.配置文件 = 选项.文本_;
            }
        }
        if (.具有!(JSON值_, dstring)(opm, "构建信息文件"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("构建信息文件"d);
            if (选项.类型 == JSON类型_.文本_) {
                编译选项.构建信息文件 = 选项.文本_;
            }
        }
        if (.具有!(JSON值_, dstring)(opm, "依赖"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("依赖"d);
            if (选项.类型 == JSON类型_.对象_) {
                dstring[dstring] 依赖;
                foreach (dstring k, JSON值_ v; 选项.对象_) {
                    依赖[k] = v.文本_;
                }
                编译选项.依赖 = 依赖;
            }
        }
        if (.具有!(JSON值_, dstring)(opm, "作者"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("作者"d);
            if (选项.类型 == JSON类型_.对象_) {
                JSON值_[dstring] 作者对象 = 选项.对象_;
                编译选项.作者 = 反序列化作者(作者对象);
            }
        }
        if (.具有!(JSON值_, dstring)(opm, "贡献"d) !is ··null!(JSON值_*)) {
            JSON值_ 选项 = op.获取属性("贡献"d);
            if (选项.类型 == JSON类型_.数组_) {
                作者_[] 贡献数组 = [];
                JSON值_[] 贡献对象 = 选项.数组_;
                foreach (JSON值_ v; 贡献对象) {
                    if (v.类型 == JSON类型_.对象_) {
                        JSON值_[dstring] 作者对象 = v.对象_;
                        .追加!(作者_)(贡献数组, 反序列化作者(作者对象));
                    }
                }
                编译选项.贡献 = 贡献数组;
            }
        }
    }
    return 编译选项;
}
编译选项_ 合并编译选项(编译选项_ 源选项, 编译选项_ 目标选项) {
    if (源选项.初始 !is ··null!(bool)) {
        目标选项.初始 = 源选项.初始;
    }
    if (源选项.帮助 !is ··null!(bool)) {
        目标选项.帮助 = 源选项.帮助;
    }
    if (源选项.版本号 !is ··null!(bool)) {
        目标选项.版本号 = 源选项.版本号;
    }
    if (源选项.监控 !is ··null!(bool)) {
        目标选项.监控 = 源选项.监控;
    }
    if (源选项.系统 !is ··null!(dstring)) {
        目标选项.系统 = 源选项.系统;
    }
    if (源选项.系统版本 !is ··null!(dstring)) {
        目标选项.系统版本 = 源选项.系统版本;
    }
    if (源选项.架构 !is ··null!(dstring)) {
        目标选项.架构 = 源选项.架构;
    }
    if (源选项.环境 !is ··null!(dstring)) {
        目标选项.环境 = 源选项.环境;
    }
    if (源选项.环境版本 !is ··null!(dstring)) {
        目标选项.环境版本 = 源选项.环境版本;
    }
    if (源选项.支持 !is ··null!(dstring)) {
        目标选项.支持 = 源选项.支持;
    }
    if (源选项.输出类型 !is ··null!(dstring)) {
        目标选项.输出类型 = 源选项.输出类型;
    }
    if (源选项.平台 !is ··null!(dstring)) {
        目标选项.平台 = 源选项.平台;
    }
    if (源选项.输出模式 !is ··null!(dstring)) {
        目标选项.输出模式 = 源选项.输出模式;
    }
    if (源选项.清屏 !is ··null!(bool)) {
        目标选项.清屏 = 源选项.清屏;
    }
    if (源选项.强制 !is ··null!(bool)) {
        目标选项.强制 = 源选项.强制;
    }
    if (源选项.详细 !is ··null!(bool)) {
        目标选项.详细 = 源选项.详细;
    }
    if (源选项.清除 !is ··null!(bool)) {
        目标选项.清除 = 源选项.清除;
    }
    if (源选项.增量 !is ··null!(bool)) {
        目标选项.增量 = 源选项.增量;
    }
    if (源选项.启用诊断 !is ··null!(bool)) {
        目标选项.启用诊断 = 源选项.启用诊断;
    }
    if (源选项.目标平台 !is ··null!(Triple)) {
        目标选项.目标平台 = 源选项.目标平台;
    }
    if (源选项.定义 !is ··null!(dstring[])) {
        目标选项.定义 = 源选项.定义;
    }
    if (源选项.彩色 !is ··null!(bool)) {
        目标选项.彩色 = 源选项.彩色;
    }
    if (源选项.输出 !is ··null!(dstring)) {
        目标选项.输出 = 源选项.输出;
    }
    if (源选项.源码 !is ··null!(dstring)) {
        目标选项.源码 = 源选项.源码;
    }
    if (源选项.地区 !is ··null!(dstring)) {
        目标选项.地区 = 源选项.地区;
    }
    if (源选项.名称 !is ··null!(dstring)) {
        目标选项.名称 = 源选项.名称;
    }
    if (源选项.版本 !is ··null!(dstring)) {
        目标选项.版本 = 源选项.版本;
    }
    if (源选项.主页 !is ··null!(dstring)) {
        目标选项.主页 = 源选项.主页;
    }
    if (源选项.依赖 !is ··null!(dstring[dstring])) {
        目标选项.依赖 = 源选项.依赖;
    }
    if (源选项.配置文件 !is ··null!(dstring)) {
        目标选项.配置文件 = 源选项.配置文件;
    }
    if (源选项.全局模块路径 !is ··null!(dstring)) {
        目标选项.全局模块路径 = 源选项.全局模块路径;
    }
    if (源选项.构建信息文件 !is ··null!(dstring)) {
        目标选项.构建信息文件 = 源选项.构建信息文件;
    }
    if (源选项.作者 !is ··null!(作者_)) {
        目标选项.作者 = 源选项.作者;
    }
    if (源选项.贡献 !is ··null!(作者_[])) {
        目标选项.贡献 = 源选项.贡献;
    }
    if (源选项.编译 !is ··null!(bool)) {
        目标选项.编译 = 源选项.编译;
    }
    return 目标选项;
}
dstring[] 转换为文本数组(JSON值_[] arr) {
    dstring[] ret = [];
    foreach (JSON值_ s; arr) {
        if (s.类型 != JSON类型_.空值_) {
            ret = .追加!(dstring)(ret, ·to!(dstring)(s.文本_));
        }
    }
    return ret;
}
词典_!(JSON值_) 序列化编译选项值(编译选项_ 选项) {
    JSON值_ delegate(编译选项_, dstring) 转换编译选项值为JSON值;
    JSON值_ delegate(作者_) 序列化作者;
    dstring[] 名称组;
    词典_!(JSON值_) ret;
    JSON值_ 转换编译选项值为JSON值·func(编译选项_ 选项, dstring name) {
        if (name == "监控"d && (选项.监控 !is ··null!(bool))) {
            return JSON值_(选项.监控);
        }
        if (name == "系统"d && (选项.系统 !is ··null!(dstring))) {
            return JSON值_(选项.系统);
        }
        if (name == "系统版本"d && (选项.系统版本 !is ··null!(dstring))) {
            return JSON值_(选项.系统版本);
        }
        if (name == "架构"d && (选项.架构 !is ··null!(dstring))) {
            return JSON值_(选项.架构);
        }
        if (name == "环境"d && (选项.环境 !is ··null!(dstring))) {
            return JSON值_(选项.环境);
        }
        if (name == "环境版本"d && (选项.环境版本 !is ··null!(dstring))) {
            return JSON值_(选项.环境版本);
        }
        if (name == "支持"d && (选项.支持 !is ··null!(dstring))) {
            return JSON值_(选项.支持);
        }
        if (name == "输出类型"d && (选项.输出类型 !is ··null!(dstring))) {
            return JSON值_(选项.输出类型);
        }
        if (name == "平台"d && (选项.平台 !is ··null!(dstring))) {
            return JSON值_(选项.平台);
        }
        if (name == "输出模式"d && (选项.输出模式 !is ··null!(dstring))) {
            return JSON值_(选项.输出模式);
        }
        if (name == "启用诊断"d && (选项.启用诊断 !is ··null!(bool))) {
            return JSON值_(选项.启用诊断);
        }
        if (name == "彩色"d && (选项.彩色 !is ··null!(bool))) {
            return JSON值_(选项.彩色);
        }
        if (name == "输出"d && (选项.输出 !is ··null!(dstring))) {
            return JSON值_(选项.输出);
        }
        if (name == "源码"d && (选项.源码 !is ··null!(dstring))) {
            return JSON值_(选项.源码);
        }
        if (name == "名称"d && (选项.名称 !is ··null!(dstring))) {
            return JSON值_(选项.名称);
        }
        if (name == "版本"d && (选项.版本 !is ··null!(dstring))) {
            return JSON值_(选项.版本);
        }
        if (name == "全局模块路径"d && (选项.全局模块路径 !is ··null!(dstring))) {
            return JSON值_(选项.全局模块路径);
        }
        if (name == "配置文件"d && (选项.配置文件 !is ··null!(dstring))) {
            return JSON值_(选项.配置文件);
        }
        if (name == "构建信息文件"d && (选项.构建信息文件 !is ··null!(dstring))) {
            return JSON值_(选项.构建信息文件);
        }
        if (name == "定义"d && (选项.定义 !is ··null!(dstring[]))) {
            JSON值_[] ret = [];
            foreach (dstring s; 选项.定义) {
                ret = .追加!(JSON值_)(ret, JSON值_(s));
            }
            return JSON值_(ret);
        }
        if (name == "作者"d && (选项.作者 !is ··null!(作者_))) {
            return 序列化作者(选项.作者);
        }
        if (name == "贡献"d && (选项.贡献 !is ··null!(作者_[]))) {
            JSON值_[] ret = [];
            foreach (作者_ v; 选项.贡献) {
                .追加!(JSON值_)(ret, 序列化作者(v));
            }
            return JSON值_(ret);
        }
        return ··null!(JSON值_);
    }
    转换编译选项值为JSON值 = &转换编译选项值为JSON值·func;
    JSON值_ 序列化作者·func(作者_ 作者) {
        JSON值_[dstring] map;
        if (作者.姓名 !is ··null!(dstring)) {
            map["姓名"d] = JSON值_(作者.姓名);
        }
        if (作者.公司 !is ··null!(dstring)) {
            map["公司"d] = JSON值_(作者.公司);
        }
        if (作者.邮箱 !is ··null!(dstring)) {
            map["邮箱"d] = JSON值_(作者.邮箱);
        }
        if (作者.博客 !is ··null!(dstring)) {
            map["博客"d] = JSON值_(作者.博客);
        }
        return JSON值_(map);
    }
    序列化作者 = &序列化作者·func;
    名称组 = ["监控"d, "系统"d, "系统版本"d, "架构"d, "环境"d, "环境版本"d, "支持"d, "输出类型"d, "平台"d, "定义"d, "输出模式"d, "启用诊断"d, "目标平台"d, "输出"d, "源码"d, "名称"d, "版本"d, "全局模块路径"d, "配置文件"d, "构建信息文件"d, "作者"d, "贡献"d];
    ret = 创建词典!(JSON值_)();
    foreach (dstring n; 名称组) {
        JSON值_ 值 = 转换编译选项值为JSON值(选项, n);
        if ((值 !is ··null!(JSON值_)) && 值.类型 != JSON类型_.空值_) {
            ret.p·设置(n, 值);
        }
    }
    return ret;
}
dstring 获取编译选项默认文本(命令行选项_ op) {
    switch (op.type) {
        case "string"d: {
            return `""`d;
        }
        case "number"d: {
            return "1"d;
        }
        case "boolean"d: {
            return "true"d;
        }
        case "object"d: {
            return "{}"d;
        }
        case "list"d: {
            return "[]"d;
        }
        default: {
            return `""`d;
        }
    }
}
dstring 生成编译或项目配置文件(编译选项_ options, 配置种类_ 种类, dstring 新行) {
    dstring delegate(long) 制作缩进;
    bool delegate(诊断消息_, 配置种类_) 是允许选项;
    dstring delegate() 写配置;
    词典_!(JSON值_) 编译选项词典;
    dstring 制作缩进·func(long 缩进数量) {
        dstring ret;
        ret = ""d;
        {
            for (int i = 0; i < 缩进数量; ++i) {
                ret ~= " "d;
            }
        }
        return ret;
    }
    制作缩进 = &制作缩进·func;
    bool 是允许选项·func(诊断消息_ category, 配置种类_ 配置种类) {
        return 配置种类 == 配置种类_.Klang ? category == 诊断集_.基本编译选项 : category == 诊断集_.项目配置;
    }
    是允许选项 = &是允许选项·func;
    dstring 写配置·func() {
        词典_!(命令行选项_[]) 分类选项;
        size_t marginLength;
        size_t seenKnownKeys;
        dstring[] nameColumn;
        dstring[] descriptionColumn;
        dstring[] result;
        分类选项 = 创建词典!(命令行选项_[])();
        foreach (命令行选项_ option; .构建选项) {
            诊断消息_ category = option.category;
            if (是允许选项(category, 种类)) {
                dstring 键 = getLocaleSpecificMessage(category);
                if (!分类选项.具有(键)) {
                    分类选项.p·设置(键, [option]);
                }
                else {
                    命令行选项_[] 值组 = 分类选项.获取(键);
                    .追加!(命令行选项_)(值组, option);
                    分类选项.p·设置(键, 值组);
                }
            }
        }
        marginLength = 0;
        seenKnownKeys = 0;
        nameColumn = [];
        descriptionColumn = [];
        分类选项.p·循环每个((命令行选项_[] options, dstring 诊断) {
            if (nameColumn.length != 0) {
                .追加!(dstring)(nameColumn, ""d);
                .追加!(dstring)(descriptionColumn, ""d);
            }
            if (种类 == 配置种类_.Klang) {
                .追加!(dstring)(nameColumn, `/* `d ~ 诊断 ~ ` */`d);
            }
            if (种类 == 配置种类_.Klang) {
                .追加!(dstring)(descriptionColumn, ""d);
            }
            foreach (命令行选项_ option; options) {
                dstring optionName = option.name;
                if (编译选项词典.具有(option.name)) {
                    JSON值_ 值 = 编译选项词典.获取(option.name);
                    seenKnownKeys += 1;
                    dstring 尾 = (seenKnownKeys) == 编译选项词典.大小() ? ""d : ","d;
                    optionName = `"`d ~ option.name ~ `": `d ~ 值.转为文本() ~ ``d ~ 尾 ~ ``d;
                }
                else {
                    optionName = `// "`d ~ optionName ~ `": `d ~ .获取编译选项默认文本(option) ~ `,`d;
                }
                .追加!(dstring)(nameColumn, optionName);
                dstring 注释 = option.name;
                if (option.description !is ··null!(诊断消息_)) {
                    注释 = getLocaleSpecificMessage(option.description);
                }
                .追加!(dstring)(descriptionColumn, `/* `d ~ 注释 ~ ` */`d);
                marginLength = 最大(optionName.length, marginLength);
            }
        });
        result = [];
        .追加!(dstring)(result, `{`d);
        if (种类 == 配置种类_.Klang) {
            .追加!(dstring)(result, ``d ~ 制作缩进(4) ~ `"编译选项": {`d);
        }
        {
            for (int i = 0; i < nameColumn.length; ++i) {
                dstring optionName;
                dstring description;
                dstring 缩进;
                optionName = nameColumn[i];
                description = descriptionColumn[i];
                缩进 = 种类 == 配置种类_.Klang ? 制作缩进(8) : 制作缩进(4);
                if (optionName !is ··null!(dstring)) {
                    dstring 注释 = ""d;
                    if (description !is ··null!(dstring)) {
                        .·writeln(marginLength);
                        注释 = 制作缩进(marginLength - optionName.length + 4) ~ description;
                    }
                    .追加!(dstring)(result, ``d ~ 缩进 ~ ``d ~ optionName ~ ``d ~ 注释 ~ ``d);
                }
            }
        }
        if (种类 == 配置种类_.Klang) {
            .追加!(dstring)(result, ``d ~ 制作缩进(4) ~ `}`d);
        }
        .追加!(dstring)(result, "}"d);
        return 连接(result, 新行) ~ 新行;
    }
    写配置 = &写配置·func;
    编译选项词典 = .序列化编译选项值(options);
    return 写配置();
}
